Skip to content

Commit f44dd16

Browse files
committed
Improve error message of foreach
Closes GH-5240
1 parent c5f091e commit f44dd16

File tree

9 files changed

+24
-24
lines changed

9 files changed

+24
-24
lines changed

Zend/tests/foreach_undefined.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ echo "Done\n";
1010
--EXPECTF--
1111
Warning: Undefined variable: a in %s on line %d
1212

13-
Warning: Invalid argument supplied for foreach() in %s on line %d
13+
Warning: foreach() argument must be of type array|object, null given in %s on line %d
1414
Done

Zend/zend_vm_def.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6188,7 +6188,7 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR)
61886188
}
61896189
}
61906190
} else {
6191-
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
6191+
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_get_type_by_const(Z_TYPE_P(array_ptr)));
61926192
ZVAL_UNDEF(EX_VAR(opline->result.var));
61936193
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
61946194
FREE_OP1();
@@ -6277,7 +6277,7 @@ ZEND_VM_COLD_CONST_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
62776277
}
62786278
}
62796279
} else {
6280-
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
6280+
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_get_type_by_const(Z_TYPE_P(array_ptr)));
62816281
ZVAL_UNDEF(EX_VAR(opline->result.var));
62826282
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
62836283
if (OP1_TYPE == IS_VAR) {
@@ -6587,7 +6587,7 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
65876587
value_type = Z_TYPE_INFO_P(value);
65886588
}
65896589
} else {
6590-
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
6590+
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_get_type_by_const(Z_TYPE_P(array)));
65916591
if (UNEXPECTED(EG(exception))) {
65926592
UNDEF_RESULT();
65936593
HANDLE_EXCEPTION();

Zend/zend_vm_execute.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4175,7 +4175,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_
41754175
}
41764176
}
41774177
} else {
4178-
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
4178+
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_get_type_by_const(Z_TYPE_P(array_ptr)));
41794179
ZVAL_UNDEF(EX_VAR(opline->result.var));
41804180
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
41814181
if (IS_CONST == IS_VAR) {
@@ -17685,7 +17685,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZE
1768517685
}
1768617686
}
1768717687
} else {
17688-
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
17688+
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_get_type_by_const(Z_TYPE_P(array_ptr)));
1768917689
ZVAL_UNDEF(EX_VAR(opline->result.var));
1769017690
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
1769117691
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
@@ -17773,7 +17773,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
1777317773
}
1777417774
}
1777517775
} else {
17776-
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
17776+
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_get_type_by_const(Z_TYPE_P(array_ptr)));
1777717777
ZVAL_UNDEF(EX_VAR(opline->result.var));
1777817778
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
1777917779
if (IS_TMP_VAR == IS_VAR) {
@@ -20345,7 +20345,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZE
2034520345
}
2034620346
}
2034720347
} else {
20348-
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
20348+
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_get_type_by_const(Z_TYPE_P(array_ptr)));
2034920349
ZVAL_UNDEF(EX_VAR(opline->result.var));
2035020350
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
2035120351
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
@@ -20434,7 +20434,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
2043420434
}
2043520435
}
2043620436
} else {
20437-
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
20437+
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_get_type_by_const(Z_TYPE_P(array_ptr)));
2043820438
ZVAL_UNDEF(EX_VAR(opline->result.var));
2043920439
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
2044020440
if (IS_VAR == IS_VAR) {
@@ -20744,7 +20744,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
2074420744
value_type = Z_TYPE_INFO_P(value);
2074520745
}
2074620746
} else {
20747-
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
20747+
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_get_type_by_const(Z_TYPE_P(array)));
2074820748
if (UNEXPECTED(EG(exception))) {
2074920749
UNDEF_RESULT();
2075020750
HANDLE_EXCEPTION();
@@ -36334,7 +36334,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEN
3633436334
}
3633536335
}
3633636336
} else {
36337-
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
36337+
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_get_type_by_const(Z_TYPE_P(array_ptr)));
3633836338
ZVAL_UNDEF(EX_VAR(opline->result.var));
3633936339
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3634036340

@@ -36422,7 +36422,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
3642236422
}
3642336423
}
3642436424
} else {
36425-
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
36425+
zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_get_type_by_const(Z_TYPE_P(array_ptr)));
3642636426
ZVAL_UNDEF(EX_VAR(opline->result.var));
3642736427
Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
3642836428
if (IS_CV == IS_VAR) {

ext/simplexml/tests/bug38347.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@ SimpleXMLElement Object
2424
(
2525
)
2626

27-
Warning: Invalid argument supplied for foreach() in %sbug38347.php on line 6
27+
Warning: foreach() argument must be of type array|object, null given in %sbug38347.php on line 6
2828
Done

ext/simplexml/tests/sxe_003.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ for ($sxe->rewind(); $sxe->valid(); $sxe->next()) {
5858

5959
?>
6060
--EXPECTF--
61-
Warning: Invalid argument supplied for foreach() in %ssxe_003.php on line %d
61+
Warning: foreach() argument must be of type array|object, null given in %ssxe_003.php on line %d
6262
===RESET===
6363
bool(true)
6464
string(5) "elem1"

tests/classes/bug27468.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ echo 'OK';
1313
--EXPECTF--
1414
Warning: Undefined property: foo::$x in %s on line %d
1515

16-
Warning: Invalid argument supplied for foreach() in %sbug27468.php on line 4
16+
Warning: foreach() argument must be of type array|object, null given in %sbug27468.php on line 4
1717
OK

tests/lang/bug27439.phpt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ echo "===DONE===";
6767
123
6868
Warning: Undefined property: test::$foobar in %s on line %d
6969

70-
Warning: Invalid argument supplied for foreach() in %s on line %d
70+
Warning: foreach() argument must be of type array|object, null given in %s on line %d
7171

72-
Warning: Invalid argument supplied for foreach() in %s on line %d
72+
Warning: foreach() argument must be of type array|object, string given in %s on line %d
7373

74-
Warning: Invalid argument supplied for foreach() in %s on line %d
74+
Warning: foreach() argument must be of type array|object, string given in %s on line %d
7575
123
7676
===DONE===

tests/lang/bug29566.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ foreach($var['nosuchkey'] as $v) {
1313
--EXPECTF--
1414
Warning: Illegal string offset 'nosuchkey' in %sbug29566.php on line %d
1515

16-
Warning: Invalid argument supplied for foreach() in %sbug29566.php on line %d
16+
Warning: foreach() argument must be of type array|object, string given in %sbug29566.php on line %d

tests/lang/foreachLoop.003.phpt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ echo "done.\n";
3333
--EXPECTF--
3434
Not an array.
3535

36-
Warning: Invalid argument supplied for foreach() in %s on line 4
36+
Warning: foreach() argument must be of type array|object, bool given in %s on line 4
3737

38-
Warning: Invalid argument supplied for foreach() in %s on line 9
38+
Warning: foreach() argument must be of type array|object, null given in %s on line 9
3939

40-
Warning: Invalid argument supplied for foreach() in %s on line 14
40+
Warning: foreach() argument must be of type array|object, int given in %s on line 14
4141

42-
Warning: Invalid argument supplied for foreach() in %s on line 19
42+
Warning: foreach() argument must be of type array|object, float given in %s on line 19
4343

44-
Warning: Invalid argument supplied for foreach() in %s on line 24
44+
Warning: foreach() argument must be of type array|object, string given in %s on line 24
4545
done.

0 commit comments

Comments
 (0)