summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/array.c6
-rw-r--r--ext/standard/tests/array/bug70808.phpt2
-rw-r--r--ext/standard/tests/array/bug76505.phpt33
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)
+ }
+}