]> granicus.if.org Git - php/commitdiff
Fixed incorrect exception handling
authorDmitry Stogov <dmitry@zend.com>
Thu, 17 Dec 2015 11:16:19 +0000 (14:16 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 17 Dec 2015 11:16:19 +0000 (14:16 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 4c01a5d1afd6b75f27855c3080be840797504e07..0e555f5f83a8853b8134564fe600fab0104f455e 100644 (file)
@@ -2383,7 +2383,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
                if (UNEXPECTED(EG(exception) != NULL)) {
                        const zend_op *old_opline = EX(opline);
                        zend_throw_exception_internal(NULL);
-                       if (RETURN_VALUE_USED(old_opline)) {
+                       if (old_opline->opcode != ZEND_HANDLE_EXCEPTION && RETURN_VALUE_USED(old_opline)) {
                                zval_ptr_dtor(EX_VAR(old_opline->result.var));
                        }
                        HANDLE_EXCEPTION_LEAVE();
index 0fd696d327d43cb377f0f6c10eca9762acda3ee0..8ef0c4dbbfc415e8dadbe0d65b5278def13a6765 100644 (file)
@@ -501,7 +501,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_
                if (UNEXPECTED(EG(exception) != NULL)) {
                        const zend_op *old_opline = EX(opline);
                        zend_throw_exception_internal(NULL);
-                       if (RETURN_VALUE_USED(old_opline)) {
+                       if (old_opline->opcode != ZEND_HANDLE_EXCEPTION && RETURN_VALUE_USED(old_opline)) {
                                zval_ptr_dtor(EX_VAR(old_opline->result.var));
                        }
                        HANDLE_EXCEPTION_LEAVE();