]> granicus.if.org Git - php/commitdiff
Fix leaks if update_constant fails
authorNikita Popov <nikic@php.net>
Wed, 13 Jul 2016 21:16:55 +0000 (23:16 +0200)
committerNikita Popov <nikic@php.net>
Thu, 14 Jul 2016 16:42:45 +0000 (18:42 +0200)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index ecac3c0dd88c9ebcbe069e3b35306ce33e587b3d..868e0351050eca71cc8cbc872afb75c0ca71e844 100644 (file)
@@ -4736,6 +4736,7 @@ ZEND_VM_HANDLER(64, ZEND_RECV_INIT, NUM, CONST)
                if (Z_OPT_CONSTANT_P(param)) {
                        SAVE_OPLINE();
                        if (UNEXPECTED(zval_update_constant_ex(param, EX(func)->op_array.scope) != SUCCESS)) {
+                               zval_ptr_dtor(param);
                                ZVAL_UNDEF(param);
                                HANDLE_EXCEPTION();
                        }
@@ -7258,6 +7259,7 @@ ZEND_VM_HANDLER(143, ZEND_DECLARE_CONST, CONST, CONST)
        ZVAL_COPY(&c.value, val);
        if (Z_OPT_CONSTANT(c.value)) {
                if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
+                       zval_ptr_dtor(&c.value);
                        FREE_OP1();
                        FREE_OP2();
                        HANDLE_EXCEPTION();
index 094fb8f8274e8ed63bd6e90cddce563072be83e0..a9e59ebd7dd3a4c048d66af31d7a14a9914dff36 100644 (file)
@@ -2277,6 +2277,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(Z
                if (Z_OPT_CONSTANT_P(param)) {
                        SAVE_OPLINE();
                        if (UNEXPECTED(zval_update_constant_ex(param, EX(func)->op_array.scope) != SUCCESS)) {
+                               zval_ptr_dtor(param);
                                ZVAL_UNDEF(param);
                                HANDLE_EXCEPTION();
                        }
@@ -6149,6 +6150,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST
        ZVAL_COPY(&c.value, val);
        if (Z_OPT_CONSTANT(c.value)) {
                if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
+                       zval_ptr_dtor(&c.value);
 
 
                        HANDLE_EXCEPTION();