]> granicus.if.org Git - php/commitdiff
Fixed reference counting
authorDmitry Stogov <dmitry@zend.com>
Wed, 16 Apr 2014 08:33:25 +0000 (12:33 +0400)
committerDmitry Stogov <dmitry@zend.com>
Wed, 16 Apr 2014 08:33:25 +0000 (12:33 +0400)
Zend/zend_builtin_functions.c

index f86b70465dace735a5a4dc734303c8bc3416bdab..aebcb7436cc4e2ea21347930ad4fa34fc58fe9a7 100644 (file)
@@ -610,11 +610,13 @@ ZEND_FUNCTION(each)
        if (Z_ISREF_P(entry)) {
                ZVAL_DUP(&tmp, Z_REFVAL_P(entry));
                entry = &tmp;
+               if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
+       } else {
+               if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
+               if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
        }
        zend_hash_index_update(Z_ARRVAL_P(return_value), 1, entry);
-       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
        zend_hash_str_update(Z_ARRVAL_P(return_value), "value", sizeof("value")-1, entry);
-       if (Z_REFCOUNTED_P(entry)) Z_ADDREF_P(entry);
 
        /* add the key elements */
        switch (zend_hash_get_current_key(target_hash, &key, &num_key, 0)) {