Skip to content

Commit 2a30f2f

Browse files
authored
Add type indicator to array/arg unpack error messages (GH-15448)
1 parent de66585 commit 2a30f2f

File tree

6 files changed

+21
-21
lines changed

6 files changed

+21
-21
lines changed

Zend/tests/arg_unpack/invalid_type.phpt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,34 @@ function test(...$args) {
1010
try {
1111
test(...null);
1212
} catch (Error $e) {
13-
echo $e->getMessage(), "\n";
13+
echo $e::class . ": " . $e->getMessage(), "\n";
1414
}
1515
try {
1616
test(...42);
1717
} catch (Error $e) {
18-
echo $e->getMessage(), "\n";
18+
echo $e::class . ": " . $e->getMessage(), "\n";
1919
}
2020
try {
2121
test(...new stdClass);
2222
} catch (Error $e) {
23-
echo $e->getMessage(), "\n";
23+
echo $e::class . ": " . $e->getMessage(), "\n";
2424
}
2525

2626
try {
2727
test(1, 2, 3, ..."foo", ...[4, 5]);
2828
} catch (Error $e) {
29-
echo $e->getMessage(), "\n";
29+
echo $e::class . ": " . $e->getMessage(), "\n";
3030
}
3131
try {
3232
test(1, 2, 3, ...new StdClass, ...3.14, ...[4, 5]);
3333
} catch (Error $e) {
34-
echo $e->getMessage(), "\n";
34+
echo $e::class . ": " . $e->getMessage(), "\n";
3535
}
3636

3737
?>
3838
--EXPECT--
39-
Only arrays and Traversables can be unpacked
40-
Only arrays and Traversables can be unpacked
41-
Only arrays and Traversables can be unpacked
42-
Only arrays and Traversables can be unpacked
43-
Only arrays and Traversables can be unpacked
39+
TypeError: Only arrays and Traversables can be unpacked, null given
40+
TypeError: Only arrays and Traversables can be unpacked, int given
41+
TypeError: Only arrays and Traversables can be unpacked, stdClass given
42+
TypeError: Only arrays and Traversables can be unpacked, string given
43+
TypeError: Only arrays and Traversables can be unpacked, stdClass given

Zend/tests/array_unpack/undef_var.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ var_dump([...$arr]);
99
--EXPECTF--
1010
Warning: Undefined variable $arr in %s on line %d
1111

12-
Fatal error: Uncaught Error: Only arrays and Traversables can be unpacked in %s:%d
12+
Fatal error: Uncaught Error: Only arrays and Traversables can be unpacked, null given in %s:%d
1313
Stack trace:
1414
#0 {main}
1515
thrown in %s on line %d

Zend/tests/array_unpack/unpack_invalid_type_compile_time.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ var_dump([...42]);
77

88
?>
99
--EXPECTF--
10-
Fatal error: Only arrays and Traversables can be unpacked in %s on line %d
10+
Fatal error: Only arrays and Traversables can be unpacked, int given in %s on line %d

Zend/zend_compile.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9829,7 +9829,7 @@ static bool zend_try_ct_eval_array(zval *result, zend_ast *ast) /* {{{ */
98299829

98309830
continue;
98319831
} else {
9832-
zend_error_noreturn(E_COMPILE_ERROR, "Only arrays and Traversables can be unpacked");
9832+
zend_error_noreturn(E_COMPILE_ERROR, "Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(value));
98339833
}
98349834
}
98359835

Zend/zend_vm_def.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5280,7 +5280,7 @@ ZEND_VM_C_LABEL(send_again):
52805280
bool have_named_params = 0;
52815281

52825282
if (!ce || !ce->get_iterator) {
5283-
zend_type_error("Only arrays and Traversables can be unpacked");
5283+
zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(args));
52845284
} else {
52855285

52865286
iter = ce->get_iterator(ce, args, 0);
@@ -5397,7 +5397,7 @@ ZEND_VM_C_LABEL(send_again):
53975397
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
53985398
ZVAL_UNDEFINED_OP1();
53995399
}
5400-
zend_type_error("Only arrays and Traversables can be unpacked");
5400+
zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(args));
54015401
}
54025402

54035403
FREE_OP1();
@@ -6285,7 +6285,7 @@ ZEND_VM_C_LABEL(add_unpack_again):
62856285
zend_object_iterator *iter;
62866286

62876287
if (!ce || !ce->get_iterator) {
6288-
zend_type_error("Only arrays and Traversables can be unpacked");
6288+
zend_type_error("Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(op1));
62896289
} else {
62906290
iter = ce->get_iterator(ce, op1, 0);
62916291
if (UNEXPECTED(!iter)) {
@@ -6360,7 +6360,7 @@ ZEND_VM_C_LABEL(add_unpack_again):
63606360
op1 = Z_REFVAL_P(op1);
63616361
ZEND_VM_C_GOTO(add_unpack_again);
63626362
} else {
6363-
zend_throw_error(NULL, "Only arrays and Traversables can be unpacked");
6363+
zend_throw_error(NULL, "Only arrays and Traversables can be unpacked, %s given", zend_zval_value_name(op1));
63646364
}
63656365

63666366
FREE_OP1();

Zend/zend_vm_execute.h

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)