]> granicus.if.org Git - php/commitdiff
Make sure fast_call_var is initialized properly
authorXinchen Hui <laruence@php.net>
Wed, 8 Jul 2015 10:24:27 +0000 (18:24 +0800)
committerXinchen Hui <laruence@php.net>
Wed, 8 Jul 2015 10:24:27 +0000 (18:24 +0800)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 062cb1f656a6a9c303bcd78e2f4e5b49334c9bec..fc66f766941c0188b89e544f03cee78d1ab2acc3 100644 (file)
@@ -7595,9 +7595,10 @@ ZEND_VM_HANDLER(162, ZEND_FAST_CALL, ANY, ANY)
                ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->op2.opline_num]);
                ZEND_VM_CONTINUE();
        }
-       if (UNEXPECTED(Z_OBJ_P(fast_call) != NULL)) {
+       if (opline->extended_value == ZEND_FAST_CALL_FROM_FINALLY && UNEXPECTED(Z_OBJ_P(fast_call) != NULL)) {
                fast_call->u2.lineno = (uint32_t)-1;
        } else {
+               Z_OBJ_P(fast_call) = NULL;
                /* set return address */
                fast_call->u2.lineno = opline - EX(func)->op_array.opcodes;
        }
index 391a83bb7a40a86d3a4f9c2a842dcc1269f41a71..533fb05bcb580abcf0bcc624fe4fbd23ef0a1ecc 100644 (file)
@@ -1607,9 +1607,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OP
                ZEND_VM_SET_OPCODE(&EX(func)->op_array.opcodes[opline->op2.opline_num]);
                ZEND_VM_CONTINUE();
        }
-       if (UNEXPECTED(Z_OBJ_P(fast_call) != NULL)) {
+       if (opline->extended_value == ZEND_FAST_CALL_FROM_FINALLY && UNEXPECTED(Z_OBJ_P(fast_call) != NULL)) {
                fast_call->u2.lineno = (uint32_t)-1;
        } else {
+               Z_OBJ_P(fast_call) = NULL;
                /* set return address */
                fast_call->u2.lineno = opline - EX(func)->op_array.opcodes;
        }