]> granicus.if.org Git - php/commitdiff
Fixed memory leaks caused by exceptions thrown from destructors (one more case).
authorDmitry Stogov <dmitry@zend.com>
Tue, 6 Dec 2016 22:43:13 +0000 (01:43 +0300)
committerDmitry Stogov <dmitry@zend.com>
Tue, 6 Dec 2016 22:43:13 +0000 (01:43 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index da819894acc39fd0a51106af0904217dbbe704f0..6529e5abd9c61da503b3b2da9e5ee168052152f2 100644 (file)
@@ -7798,6 +7798,7 @@ ZEND_VM_HANDLER(157, ZEND_FETCH_CLASS_NAME, ANY, ANY, CLASS_FETCH)
                zend_throw_error(NULL, "Cannot use \"%s\" when no class scope is active",
                        fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
                        fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
+               ZVAL_UNDEF(EX_VAR(opline->result.var));
                HANDLE_EXCEPTION();
        }
 
@@ -7809,6 +7810,7 @@ ZEND_VM_HANDLER(157, ZEND_FETCH_CLASS_NAME, ANY, ANY, CLASS_FETCH)
                        if (UNEXPECTED(scope->parent == NULL)) {
                                zend_throw_error(NULL,
                                        "Cannot use \"parent\" when current class scope has no parent");
+                               ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
                        }
                        ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
index 7727abd9ee185db760e8679264d17f9cf81d2d5c..e1d71659d8c6e8e25948df6934cf26506eafc073 100644 (file)
@@ -1908,6 +1908,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_HANDLER(
                zend_throw_error(NULL, "Cannot use \"%s\" when no class scope is active",
                        fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
                        fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
+               ZVAL_UNDEF(EX_VAR(opline->result.var));
                HANDLE_EXCEPTION();
        }
 
@@ -1919,6 +1920,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_HANDLER(
                        if (UNEXPECTED(scope->parent == NULL)) {
                                zend_throw_error(NULL,
                                        "Cannot use \"parent\" when current class scope has no parent");
+                               ZVAL_UNDEF(EX_VAR(opline->result.var));
                                HANDLE_EXCEPTION();
                        }
                        ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);