]> granicus.if.org Git - php/commitdiff
gc_check_possible_root() may throw exception.
authorDmitry Stogov <dmitry@zend.com>
Mon, 17 Jul 2017 20:17:16 +0000 (23:17 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 17 Jul 2017 20:17:16 +0000 (23:17 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index fa4b6822090169bceacb91924051c73f88c03719..6c5f5a2790c81523e11167dedf11b9272df4ae65 100644 (file)
@@ -5336,13 +5336,13 @@ ZEND_VM_HANDLER(196, ZEND_UNSET_CV, CV, UNUSED)
                zend_refcounted *garbage = Z_COUNTED_P(var);
 
                ZVAL_UNDEF(var);
+               SAVE_OPLINE();
                if (!--GC_REFCOUNT(garbage)) {
-                       SAVE_OPLINE();
                        zval_dtor_func(garbage);
-                       ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
                } else {
                        gc_check_possible_root(garbage);
                }
+               ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        } else {
                ZVAL_UNDEF(var);
        }
index bbe6dffc07c9bfb681d6cb940bb0f41bbe57f048..202d208d0b2b8357b1fbd071f731375da7ba3cdc 100644 (file)
@@ -40127,13 +40127,13 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLE
                zend_refcounted *garbage = Z_COUNTED_P(var);
 
                ZVAL_UNDEF(var);
+               SAVE_OPLINE();
                if (!--GC_REFCOUNT(garbage)) {
-                       SAVE_OPLINE();
                        zval_dtor_func(garbage);
-                       ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
                } else {
                        gc_check_possible_root(garbage);
                }
+               ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
        } else {
                ZVAL_UNDEF(var);
        }