diff options
author | Christoph M. Becker <cmb@php.net> | 2016-06-09 15:58:09 +0200 |
---|---|---|
committer | Christoph M. Becker <cmb@php.net> | 2016-06-09 15:58:09 +0200 |
commit | 2ce190bb83c728036a14a166f9f67015f222cfc3 (patch) | |
tree | 4f2ab19b5dd2da632a38e5d3bf7a7136e875d700 /ext/standard/array.c | |
parent | 74c06a64f05ad6364a9aaef2d9e0d64304047539 (diff) | |
parent | b602495e5c29e58836934549d773e10341c63571 (diff) | |
download | php-git-2ce190bb83c728036a14a166f9f67015f222cfc3.tar.gz |
Merge branch 'master' of http://git.php.net/repository/php-src
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r-- | ext/standard/array.c | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index 01e87d80e9..cba3b5d46e 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -3239,18 +3239,19 @@ static inline void php_array_merge_or_replace_wrapper(INTERNAL_FUNCTION_PARAMETE src = Z_ARRVAL_P(arg); dest = Z_ARRVAL_P(return_value); ZEND_HASH_FOREACH_KEY_VAL(src, idx, string_key, src_entry) { - if (UNEXPECTED(Z_ISREF_P(src_entry) && Z_REFCOUNT_P(src_entry) == 1)) { - src_entry = Z_REFVAL_P(src_entry); - } - if (string_key) { - if (Z_REFCOUNTED_P(src_entry)) { + if (Z_REFCOUNTED_P(src_entry)) { + if (UNEXPECTED(Z_ISREF_P(src_entry) && Z_REFCOUNT_P(src_entry) == 1)) { + src_entry = Z_REFVAL_P(src_entry); + if (Z_REFCOUNTED_P(src_entry)) { + Z_ADDREF_P(src_entry); + } + } else { Z_ADDREF_P(src_entry); } + } + if (string_key) { zend_hash_add_new(dest, string_key, src_entry); } else { - if (Z_REFCOUNTED_P(src_entry)) { - Z_ADDREF_P(src_entry); - } zend_hash_index_add_new(dest, idx, src_entry); } } ZEND_HASH_FOREACH_END(); @@ -3279,18 +3280,19 @@ static inline void php_array_merge_or_replace_wrapper(INTERNAL_FUNCTION_PARAMETE src = Z_ARRVAL_P(arg); dest = Z_ARRVAL_P(return_value); ZEND_HASH_FOREACH_STR_KEY_VAL(src, string_key, src_entry) { - if (UNEXPECTED(Z_ISREF_P(src_entry) && Z_REFCOUNT_P(src_entry) == 1)) { - src_entry = Z_REFVAL_P(src_entry); - } - if (string_key) { - if (Z_REFCOUNTED_P(src_entry)) { + if (Z_REFCOUNTED_P(src_entry)) { + if (UNEXPECTED(Z_ISREF_P(src_entry) && Z_REFCOUNT_P(src_entry) == 1)) { + src_entry = Z_REFVAL_P(src_entry); + if (Z_REFCOUNTED_P(src_entry)) { + Z_ADDREF_P(src_entry); + } + } else { Z_ADDREF_P(src_entry); } + } + if (string_key) { zend_hash_add_new(dest, string_key, src_entry); } else { - if (Z_REFCOUNTED_P(src_entry)) { - Z_ADDREF_P(src_entry); - } zend_hash_next_index_insert_new(dest, src_entry); } } ZEND_HASH_FOREACH_END(); |