diff options
| -rw-r--r-- | ext/standard/array.c | 6 | ||||
| -rw-r--r-- | ext/standard/tests/array/bug70808.phpt | 2 | ||||
| -rw-r--r-- | ext/standard/tests/array/bug76505.phpt | 33 |
3 files changed, 35 insertions, 6 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index b3852619d6..b2d9b36c35 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -3666,10 +3666,6 @@ PHPAPI int php_array_merge_recursive(HashTable *dest, HashTable *src) /* {{{ */ if (Z_TYPE_P(dest_zval) == IS_NULL) { convert_to_array_ex(dest_zval); add_next_index_null(dest_zval); - } else if (Z_TYPE_P(dest_zval) == IS_ARRAY) { - if (UNEXPECTED(Z_ARRVAL_P(dest_zval)->nNextFreeElement > (zend_long)Z_ARRVAL_P(dest_zval)->nNumUsed)) { - Z_ARRVAL_P(dest_zval)->nNextFreeElement = Z_ARRVAL_P(dest_zval)->nNumUsed; - } } else { convert_to_array_ex(dest_zval); } @@ -3702,7 +3698,7 @@ PHPAPI int php_array_merge_recursive(HashTable *dest, HashTable *src) /* {{{ */ zval_add_ref(zv); } } else { - zval *zv = zend_hash_next_index_insert_new(dest, src_entry); + zval *zv = zend_hash_next_index_insert(dest, src_entry); zval_add_ref(zv); } } ZEND_HASH_FOREACH_END(); diff --git a/ext/standard/tests/array/bug70808.phpt b/ext/standard/tests/array/bug70808.phpt index 8a625386d3..df82da8c00 100644 --- a/ext/standard/tests/array/bug70808.phpt +++ b/ext/standard/tests/array/bug70808.phpt @@ -17,7 +17,7 @@ Array [key] => Array ( [0] => 0 - [1] => 2 + [2] => 2 ) ) diff --git a/ext/standard/tests/array/bug76505.phpt b/ext/standard/tests/array/bug76505.phpt new file mode 100644 index 0000000000..ad0b2c86e5 --- /dev/null +++ b/ext/standard/tests/array/bug76505.phpt @@ -0,0 +1,33 @@ +--TEST-- +Bug #76505 (array_merge_recursive() is duplicating sub-array keys) +--FILE-- +<?php +$array1 = array( + 'k' => array( + 2 => 100, + 98 => 200, + ) +); + +$array2 = array( + 'k' => array( + 64 => 300 + ) +); + +$array3 = array_merge_recursive( $array1, $array2 ); + +var_dump($array3); +?> +--EXPECT-- +array(1) { + ["k"]=> + array(3) { + [2]=> + int(100) + [98]=> + int(200) + [99]=> + int(300) + } +} |
