]> granicus.if.org Git - php/commitdiff
Fix passing of undef var to named arg
authorNikita Popov <nikita.ppv@gmail.com>
Wed, 26 Aug 2020 09:52:45 +0000 (11:52 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Wed, 26 Aug 2020 09:53:02 +0000 (11:53 +0200)
This needs to use the previously computed argument target.

Zend/tests/named_params/undef_var.phpt [new file with mode: 0644]
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

diff --git a/Zend/tests/named_params/undef_var.phpt b/Zend/tests/named_params/undef_var.phpt
new file mode 100644 (file)
index 0000000..b1d5682
--- /dev/null
@@ -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
index 561c23af8c2886b70b43e5e4806c9b95cb692a00..a0beebd9fac7950a92f519257d6cff9a6cad9d74 100644 (file)
@@ -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();
        }
index 31325fb4ab70dd0186aad0319b8a338cb1ed4fd0..825c49c0b4d25a6ca9e8c0300d7966f141934d87 100644 (file)
@@ -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();
        }