]> granicus.if.org Git - php/commitdiff
Fixed memory leak
authorDmitry Stogov <dmitry@zend.com>
Thu, 14 Jul 2016 10:14:15 +0000 (13:14 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 14 Jul 2016 10:14:15 +0000 (13:14 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index ce3fbeb98c1966f1277b018747eb2dff8d9590e6..a40b2cb39c12fa5e4f9a49b7df13eb4643bb3e89 100644 (file)
@@ -5383,6 +5383,10 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL)
        new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
        FREE_OP1();
        if (UNEXPECTED(EG(exception) != NULL)) {
+               if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
+                       destroy_op_array(new_op_array);
+                       efree_size(new_op_array, sizeof(zend_op_array));
+               }
                HANDLE_EXCEPTION();
        } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
                if (RETURN_VALUE_USED(opline)) {
index ef73b195a070784d48a0034a4675b51e8c8e9152..5a53938ef337a6490ccd766016792530040a6475 100644 (file)
@@ -3387,6 +3387,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HAN
        new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
 
        if (UNEXPECTED(EG(exception) != NULL)) {
+               if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
+                       destroy_op_array(new_op_array);
+                       efree_size(new_op_array, sizeof(zend_op_array));
+               }
                HANDLE_EXCEPTION();
        } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
                if (RETURN_VALUE_USED(opline)) {
@@ -35120,6 +35124,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLE
        new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
 
        if (UNEXPECTED(EG(exception) != NULL)) {
+               if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
+                       destroy_op_array(new_op_array);
+                       efree_size(new_op_array, sizeof(zend_op_array));
+               }
                HANDLE_EXCEPTION();
        } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
                if (RETURN_VALUE_USED(opline)) {
@@ -51046,6 +51054,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HA
        new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
        zval_ptr_dtor_nogc(free_op1);
        if (UNEXPECTED(EG(exception) != NULL)) {
+               if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
+                       destroy_op_array(new_op_array);
+                       efree_size(new_op_array, sizeof(zend_op_array));
+               }
                HANDLE_EXCEPTION();
        } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
                if (RETURN_VALUE_USED(opline)) {