]> granicus.if.org Git - php/commitdiff
fixed memory leak
authorDmitry Stogov <dmitry@zend.com>
Wed, 20 Aug 2014 06:43:37 +0000 (10:43 +0400)
committerDmitry Stogov <dmitry@zend.com>
Wed, 20 Aug 2014 06:43:37 +0000 (10:43 +0400)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 34e317c9c0083bd6fda69f497a5007263fc4cb0a..c71a0b7ed351e86241b9ac004ece68bd5f8135d1 100644 (file)
@@ -4551,6 +4551,9 @@ ZEND_VM_HANDLER(77, ZEND_FE_RESET, CONST|TMP|VAR|CV, ANY)
                                    (Z_ISREF_P(array_ref) &&
                                     Z_REFCOUNTED_P(array_ptr) &&
                                     Z_REFCOUNT_P(array_ptr) > 1)) {
+                                       if (!Z_IMMUTABLE_P(array_ptr)) {
+                                               Z_DELREF_P(array_ptr);
+                                       }
                                        zval_copy_ctor(array_ptr);
                                }
                                Z_ADDREF_P(array_ref);
index ad879ed7773170ab6bc84d5b6c76df2167ec4072..40dab7a2d203bf5cdd797973fc43cb8cb2a7189c 100644 (file)
@@ -3165,6 +3165,9 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_A
                                    (Z_ISREF_P(array_ref) &&
                                     Z_REFCOUNTED_P(array_ptr) &&
                                     Z_REFCOUNT_P(array_ptr) > 1)) {
+                                       if (!Z_IMMUTABLE_P(array_ptr)) {
+                                               Z_DELREF_P(array_ptr);
+                                       }
                                        zval_copy_ctor(array_ptr);
                                }
                                Z_ADDREF_P(array_ref);
@@ -8685,6 +8688,9 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG
                                    (Z_ISREF_P(array_ref) &&
                                     Z_REFCOUNTED_P(array_ptr) &&
                                     Z_REFCOUNT_P(array_ptr) > 1)) {
+                                       if (!Z_IMMUTABLE_P(array_ptr)) {
+                                               Z_DELREF_P(array_ptr);
+                                       }
                                        zval_copy_ctor(array_ptr);
                                }
                                Z_ADDREF_P(array_ref);
@@ -14128,6 +14134,9 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG
                                    (Z_ISREF_P(array_ref) &&
                                     Z_REFCOUNTED_P(array_ptr) &&
                                     Z_REFCOUNT_P(array_ptr) > 1)) {
+                                       if (!Z_IMMUTABLE_P(array_ptr)) {
+                                               Z_DELREF_P(array_ptr);
+                                       }
                                        zval_copy_ctor(array_ptr);
                                }
                                Z_ADDREF_P(array_ref);
@@ -31489,6 +31498,9 @@ static int ZEND_FASTCALL  ZEND_FE_RESET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                                    (Z_ISREF_P(array_ref) &&
                                     Z_REFCOUNTED_P(array_ptr) &&
                                     Z_REFCOUNT_P(array_ptr) > 1)) {
+                                       if (!Z_IMMUTABLE_P(array_ptr)) {
+                                               Z_DELREF_P(array_ptr);
+                                       }
                                        zval_copy_ctor(array_ptr);
                                }
                                Z_ADDREF_P(array_ref);