]> granicus.if.org Git - php/commitdiff
Removed wrong warning
authorDmitry Stogov <dmitry@zend.com>
Wed, 13 Jul 2016 17:04:47 +0000 (20:04 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 13 Jul 2016 17:04:47 +0000 (20:04 +0300)
Zend/tests/bug72215_3.phpt [new file with mode: 0644]
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

diff --git a/Zend/tests/bug72215_3.phpt b/Zend/tests/bug72215_3.phpt
new file mode 100644 (file)
index 0000000..38c017b
--- /dev/null
@@ -0,0 +1,16 @@
+--TEST--
+Bug #72215.3 (Wrong return value if var modified in finally)
+--FILE--
+<?php
+function &test() {
+    try {
+           return $a;
+    } finally {
+        $a = 2;
+    }
+}
+var_dump(test());
+?>
+--EXPECT--
+NULL
+
index f93e89f39f4bf77e38447f1bda2766b319597253..d8e033fec052656ccffeb8187c8027f41aa84bf5 100644 (file)
@@ -8103,13 +8103,11 @@ ZEND_VM_HANDLER(51, ZEND_MAKE_REF, VAR|CV, UNUSED)
 
        if (OP1_TYPE == IS_CV) {
                if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
-                       SAVE_OPLINE();
-                       GET_OP1_UNDEF_CV(op1, BP_VAR_R);
                        ZVAL_NULL(EX_VAR(opline->result.var));
-                       ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+               } else {
+                       ZVAL_MAKE_REF(op1);
+                       ZVAL_COPY(EX_VAR(opline->result.var), op1);
                }
-               ZVAL_MAKE_REF(op1);
-               ZVAL_COPY(EX_VAR(opline->result.var), op1);
        } else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
                op1 = Z_INDIRECT_P(op1);
                if (EXPECTED(!Z_ISREF_P(op1))) {
index 8574b2436c9606d48f9ba71a3bccf01853b05516..703049942bbd4e8b9315e3df2e7c4476a6f8a85b 100644 (file)
@@ -21820,13 +21820,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDL
 
        if (IS_VAR == IS_CV) {
                if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
-                       SAVE_OPLINE();
-                       GET_OP1_UNDEF_CV(op1, BP_VAR_R);
                        ZVAL_NULL(EX_VAR(opline->result.var));
-                       ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+               } else {
+                       ZVAL_MAKE_REF(op1);
+                       ZVAL_COPY(EX_VAR(opline->result.var), op1);
                }
-               ZVAL_MAKE_REF(op1);
-               ZVAL_COPY(EX_VAR(opline->result.var), op1);
        } else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
                op1 = Z_INDIRECT_P(op1);
                if (EXPECTED(!Z_ISREF_P(op1))) {
@@ -42817,13 +42815,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLE
 
        if (IS_CV == IS_CV) {
                if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
-                       SAVE_OPLINE();
-                       GET_OP1_UNDEF_CV(op1, BP_VAR_R);
                        ZVAL_NULL(EX_VAR(opline->result.var));
-                       ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+               } else {
+                       ZVAL_MAKE_REF(op1);
+                       ZVAL_COPY(EX_VAR(opline->result.var), op1);
                }
-               ZVAL_MAKE_REF(op1);
-               ZVAL_COPY(EX_VAR(opline->result.var), op1);
        } else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
                op1 = Z_INDIRECT_P(op1);
                if (EXPECTED(!Z_ISREF_P(op1))) {