Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Fix misleading pass by reference error message
  • Loading branch information
kocsismate committed Jul 18, 2023
commit 7b3f25b2828a31046610544bc00ad1c2e6913833
4 changes: 2 additions & 2 deletions Zend/tests/bug72038.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,6 @@ function test(&$param) {

?>
--EXPECT--
test(): Argument #1 ($param) cannot be passed by reference
test(): Argument #1 ($param) cannot be passed by reference
test(): Argument #1 ($param) must be passed by reference
test(): Argument #1 ($param) must be passed by reference
int(1)
2 changes: 1 addition & 1 deletion Zend/tests/bug73663_2.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ change(list($val) = $array);
var_dump($array);
?>
--EXPECTF--
Fatal error: Uncaught Error: change(): Argument #1 ($ref) cannot be passed by reference in %s:%d
Fatal error: Uncaught Error: change(): Argument #1 ($ref) must be passed by reference in %s:%d
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't agree with the wording, the issue is that the thing being passed to the function parameter is a value for which a reference cannot be taken, as it's only variables that can be passed by references.

Your wording suggests that I should do something like change(&(list($val) = $array)) which is non sensical.

Better wording may be: Argument #1 ($ref) is a value and therefore cannot be passed by reference in %s:%d

Stack trace:
#0 {main}
thrown in %s on line %d
4 changes: 2 additions & 2 deletions Zend/tests/bug78154.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,5 @@ namespace Foo {

?>
--EXPECT--
Exception: similar_text(): Argument #3 ($percent) cannot be passed by reference
Exception: similar_text(): Argument #3 ($percent) cannot be passed by reference
Exception: similar_text(): Argument #3 ($percent) must be passed by reference
Exception: similar_text(): Argument #3 ($percent) must be passed by reference
2 changes: 1 addition & 1 deletion Zend/tests/bug79783.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Bug #79783: Segfault in php_str_replace_common
str_replace("a", "b", "c", strlen("d"));
?>
--EXPECTF--
Fatal error: Uncaught Error: str_replace(): Argument #4 ($count) cannot be passed by reference in %s:%d
Fatal error: Uncaught Error: str_replace(): Argument #4 ($count) must be passed by reference in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
2 changes: 1 addition & 1 deletion Zend/tests/closure_019.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ int(9)
Notice: Only variable references should be returned by reference in %sclosure_019.php on line 4
int(81)

Fatal error: Uncaught Error: {closure}(): Argument #1 ($x) cannot be passed by reference in %s:%d
Fatal error: Uncaught Error: {closure}(): Argument #1 ($x) must be passed by reference in %s:%d
Stack trace:
#0 %s(%d): test()
#1 {main}
Expand Down
2 changes: 1 addition & 1 deletion Zend/tests/errmsg_022.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ foo(1);
echo "Done\n";
?>
--EXPECTF--
Fatal error: Uncaught Error: foo(): Argument #1 ($var) cannot be passed by reference in %s:%d
Fatal error: Uncaught Error: foo(): Argument #1 ($var) must be passed by reference in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
2 changes: 1 addition & 1 deletion Zend/tests/match/027.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ main();
usesValue 0
i is 0

Fatal error: Uncaught Error: Test::usesRef(): Argument #1 ($x) cannot be passed by reference in %s:%d
Fatal error: Uncaught Error: Test::usesRef(): Argument #1 ($x) must be passed by reference in %s:%d
Stack trace:
#0 %s(%d): main()
#1 {main}
Expand Down
2 changes: 1 addition & 1 deletion Zend/tests/match/028.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,4 @@ try {
usesValue 42
usesValue 42
int(42)
Caught Test::usesRef(): Argument #1 ($x) cannot be passed by reference
Caught Test::usesRef(): Argument #1 ($x) must be passed by reference
2 changes: 1 addition & 1 deletion Zend/tests/named_params/cannot_pass_by_ref.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ try {
}
?>
--EXPECT--
test(): Argument #2 ($e) cannot be passed by reference
test(): Argument #2 ($e) must be passed by reference
8 changes: 4 additions & 4 deletions Zend/tests/nullsafe_operator/016.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ test(new Foo());

?>
--EXPECT--
set(): Argument #1 ($ref) cannot be passed by reference
set(): Argument #1 ($ref) cannot be passed by reference
set(): Argument #1 ($ref) cannot be passed by reference
set(): Argument #1 ($ref) cannot be passed by reference
set(): Argument #1 ($ref) must be passed by reference
set(): Argument #1 ($ref) must be passed by reference
set(): Argument #1 ($ref) must be passed by reference
set(): Argument #1 ($ref) must be passed by reference
6 changes: 3 additions & 3 deletions Zend/tests/restrict_globals/invalid_pass_by_ref.phpt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
--TEST--
$GLOBALS cannot be passed by reference (runtime error)
$GLOBALS must be passed by reference (runtime error)
--FILE--
<?php

Expand All @@ -19,5 +19,5 @@ function by_ref2(&$ref) {}

?>
--EXPECT--
by_ref(): Argument #1 ($ref) cannot be passed by reference
by_ref2(): Argument #1 ($ref) cannot be passed by reference
by_ref(): Argument #1 ($ref) must be passed by reference
by_ref2(): Argument #1 ($ref) must be passed by reference
2 changes: 1 addition & 1 deletion Zend/tests/variadic/by_ref_error.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ test(1);

?>
--EXPECTF--
Fatal error: Uncaught Error: test(): Argument #1 cannot be passed by reference in %s:%d
Fatal error: Uncaught Error: test(): Argument #1 must be passed by reference in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
2 changes: 1 addition & 1 deletion Zend/zend_execute.c
Original file line number Diff line number Diff line change
Expand Up @@ -595,7 +595,7 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_cannot_pass_by_reference(uint32_t arg
zend_string *func_name = get_function_or_method_name(EX(call)->func);
const char *param_name = get_function_arg_name(EX(call)->func, arg_num);

zend_throw_error(NULL, "%s(): Argument #%d%s%s%s cannot be passed by reference",
zend_throw_error(NULL, "%s(): Argument #%d%s%s%s must be passed by reference",
ZSTR_VAL(func_name), arg_num, param_name ? " ($" : "", param_name ? param_name : "", param_name ? ")" : ""
);

Expand Down
2 changes: 1 addition & 1 deletion ext/opcache/tests/optimize_func_calls.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ Array
string(7) "changed"
string(7) "changed"

Fatal error: Uncaught Error: ref(): Argument #1 ($b) cannot be passed by reference in %soptimize_func_calls.php:%d
Fatal error: Uncaught Error: ref(): Argument #1 ($b) must be passed by reference in %soptimize_func_calls.php:%d
Stack trace:
#0 {main}
thrown in %soptimize_func_calls.php on line %d
2 changes: 1 addition & 1 deletion ext/pcre/tests/preg_match_all_error3.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ echo "Done";
--EXPECTF--
*** Testing preg_match_all() : error conditions ***

Fatal error: Uncaught Error: preg_match_all(): Argument #3 ($matches) cannot be passed by reference in %s:%d
Fatal error: Uncaught Error: preg_match_all(): Argument #3 ($matches) must be passed by reference in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
2 changes: 1 addition & 1 deletion ext/pdo_mysql/tests/bug_37445.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ $stmt = $db->prepare("SELECT 1");
$stmt->bindParam(':a', 'b');
?>
--EXPECTF--
Fatal error: Uncaught Error: PDOStatement::bindParam(): Argument #2 ($var) cannot be passed by reference in %sbug_37445.php:%d
Fatal error: Uncaught Error: PDOStatement::bindParam(): Argument #2 ($var) must be passed by reference in %sbug_37445.php:%d
Stack trace:
#0 {main}
thrown in %sbug_37445.php on line %d
2 changes: 1 addition & 1 deletion ext/standard/tests/array/array_next_error2.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ function f() {
var_dump(next(array(1, 2)));
?>
--EXPECTF--
Fatal error: Uncaught Error: next(): Argument #1 ($array) cannot be passed by reference in %s:%d
Fatal error: Uncaught Error: next(): Argument #1 ($array) must be passed by reference in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
2 changes: 1 addition & 1 deletion ext/standard/tests/array/bug31158.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ __();
echo "ok\n";
?>
--EXPECTF--
Fatal error: Uncaught Error: array_splice(): Argument #1 ($array) cannot be passed by reference in %s:%d
Fatal error: Uncaught Error: array_splice(): Argument #1 ($array) must be passed by reference in %s:%d
Stack trace:
#0 %s(%d): __()
#1 {main}
Expand Down
2 changes: 1 addition & 1 deletion ext/standard/tests/array/prev_error3.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ prev - ensure we cannot pass a temporary
var_dump(prev(array(1, 2)));
?>
--EXPECTF--
Fatal error: Uncaught Error: prev(): Argument #1 ($array) cannot be passed by reference in %s:%d
Fatal error: Uncaught Error: prev(): Argument #1 ($array) must be passed by reference in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
2 changes: 1 addition & 1 deletion tests/classes/constants_error_003.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Basic class support - attempting to pass a class constant by reference.
var_dump(aclass::myConst);
?>
--EXPECTF--
Fatal error: Uncaught Error: f(): Argument #1 ($a) cannot be passed by reference in %s:%d
Fatal error: Uncaught Error: f(): Argument #1 ($a) must be passed by reference in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
2 changes: 1 addition & 1 deletion tests/lang/passByReference_002.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ f(2);

?>
--EXPECTF--
Fatal error: Uncaught Error: f(): Argument #1 ($arg1) cannot be passed by reference in %s:%d
Fatal error: Uncaught Error: f(): Argument #1 ($arg1) must be passed by reference in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
6 changes: 3 additions & 3 deletions tests/lang/passByReference_010.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,11 @@ try {
?>
--EXPECT--
---> Pass constant assignment by reference:
Exception: f(): Argument #1 ($a) cannot be passed by reference
Exception: f(): Argument #1 ($a) must be passed by reference


---> Pass variable assignment by reference:
Exception: f(): Argument #1 ($a) cannot be passed by reference
Exception: f(): Argument #1 ($a) must be passed by reference


---> Pass reference assignment by reference:
Expand All @@ -63,4 +63,4 @@ string(9) "a.changed"


---> Pass concat assignment by reference:
Exception: f(): Argument #1 ($a) cannot be passed by reference
Exception: f(): Argument #1 ($a) must be passed by reference