summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-08-26 11:52:45 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-08-26 11:53:02 +0200
commit1003ae2692ef76d34d75d417e913562b64695646 (patch)
tree7eafc2ab32dacec354e7fdb65f8b35fb3a00b65e
parent492621f99eb202c4782564334f2fe71aae43c84e (diff)
downloadphp-git-1003ae2692ef76d34d75d417e913562b64695646.tar.gz
Fix passing of undef var to named arg
This needs to use the previously computed argument target.
-rw-r--r--Zend/tests/named_params/undef_var.phpt17
-rw-r--r--Zend/zend_vm_def.h1
-rw-r--r--Zend/zend_vm_execute.h6
3 files changed, 17 insertions, 7 deletions
diff --git a/Zend/tests/named_params/undef_var.phpt b/Zend/tests/named_params/undef_var.phpt
new file mode 100644
index 0000000000..b1d5682434
--- /dev/null
+++ b/Zend/tests/named_params/undef_var.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Passing undefined variabled to named arg
+--FILE--
+<?php
+
+function func1($arg) { var_dump($arg); }
+func1(arg: $undef);
+func2(arg: $undef);
+function func2($arg) { var_dump($arg); }
+
+?>
+--EXPECTF--
+Warning: Undefined variable $undef in %s on line %d
+NULL
+
+Warning: Undefined variable $undef in %s on line %d
+NULL
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 561c23af8c..a0beebd9fa 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -4855,7 +4855,6 @@ ZEND_VM_C_LABEL(send_var_by_ref):
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
- arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_NULL(arg);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 31325fb4ab..825c49c0b4 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -23363,7 +23363,6 @@ send_var_by_ref:
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
- arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_NULL(arg);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -27309,7 +27308,6 @@ send_var_by_ref:
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
- arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_NULL(arg);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -27376,7 +27374,6 @@ send_var_by_ref:
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
- arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_NULL(arg);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -40895,7 +40892,6 @@ send_var_by_ref:
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
- arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_NULL(arg);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -46015,7 +46011,6 @@ send_var_by_ref:
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
- arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_NULL(arg);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -46081,7 +46076,6 @@ send_var_by_ref:
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
SAVE_OPLINE();
ZVAL_UNDEFINED_OP1();
- arg = ZEND_CALL_VAR(EX(call), opline->result.var);
ZVAL_NULL(arg);
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}