]> granicus.if.org Git - php/commitdiff
Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd
authorDmitry Stogov <dmitry@zend.com>
Mon, 10 Jul 2017 14:34:30 +0000 (17:34 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 10 Jul 2017 14:34:30 +0000 (17:34 +0300)
ext/standard/var_unserializer.re

index 6e7f76fea2e84b9d8e9d4e608f9ee1bb8af801b0..1285d41b471e3e46b4e7e6d8406377de90251b8e 100644 (file)
@@ -391,7 +391,7 @@ static zend_always_inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTab
                ZVAL_UNDEF(&key);
 
                if (!php_var_unserialize_internal(&key, p, max, NULL)) {
-                       zval_dtor(&key);
+                       zval_ptr_dtor(&key);
                        return 0;
                }
 
@@ -421,7 +421,7 @@ numeric_key:
                                        data = zend_hash_add_new(ht, Z_STR(key), &d);
                                }
                        } else {
-                               zval_dtor(&key);
+                               zval_ptr_dtor(&key);
                                return 0;
                        }
                } else {
@@ -435,7 +435,7 @@ string_key:
                                        size_t unmangled_prop_len;
 
                                        if (UNEXPECTED(zend_unmangle_property_name_ex(Z_STR(key), &unmangled_class, &unmangled_prop, &unmangled_prop_len) == FAILURE)) {
-                                               zval_dtor(&key);
+                                               zval_ptr_dtor(&key);
                                                return 0;
                                        }
 
@@ -465,7 +465,7 @@ string_key:
                                                        new_key = unmangled;
                                                }
                                                zend_string_release(Z_STR(key));
-                                               Z_STR(key) = new_key;
+                                               ZVAL_STR(&key, new_key);
                                        } else {
                                                zend_string_release(unmangled);
                                        }
@@ -485,13 +485,13 @@ string_key:
                                convert_to_string(&key);
                                goto string_key;
                        } else {
-                               zval_dtor(&key);
+                               zval_ptr_dtor(&key);
                                return 0;
                        }
                }
 
                if (!php_var_unserialize_internal(data, p, max, var_hash)) {
-                       zval_dtor(&key);
+                       zval_ptr_dtor(&key);
                        return 0;
                }
 
@@ -505,7 +505,7 @@ string_key:
                        var_push_dtor(var_hash, data);
                }
 
-               zval_dtor(&key);
+               zval_ptr_dtor(&key);
 
                if (elements && *(*p-1) != ';' && *(*p-1) != '}') {
                        (*p)--;