]> granicus.if.org Git - php/commitdiff
Fixed destructive assignment
authorDmitry Stogov <dmitry@zend.com>
Thu, 15 May 2014 08:29:52 +0000 (12:29 +0400)
committerDmitry Stogov <dmitry@zend.com>
Thu, 15 May 2014 08:29:52 +0000 (12:29 +0400)
ext/soap/php_packet_soap.c

index ce505b433399858bbcd68d8966f814a3d2bd8b22..07bda29e5d1febfd27f766f916134a32d14e2a99 100644 (file)
@@ -380,9 +380,13 @@ int parse_packet_soap(zval *this_ptr, char *buffer, int buffer_size, sdlFunction
 
                        zend_hash_internal_pointer_reset(Z_ARRVAL_P(return_value));
                        tmp = zend_hash_get_current_data(Z_ARRVAL_P(return_value));
-                       if (Z_REFCOUNTED_P(tmp)) Z_ADDREF_P(tmp);
-                       zval_dtor(return_value);
-                       ZVAL_COPY_VALUE(return_value, tmp);
+                       if (!Z_REFCOUNTED_P(return_value)) {
+                               ZVAL_COPY_VALUE(return_value, tmp);
+                       } else {
+                               zend_refcounted *garbage = Z_COUNTED_P(return_value);
+                               ZVAL_COPY(return_value, tmp);
+                               _zval_dtor_func(garbage ZEND_FILE_LINE_CC);
+                       }
                }
        }