Browse Source

- MFH: Fixed bug #48854 (array_merge_recursive modifies arrays after first one)

experimental/5.3-FPM
Felipe Pena 17 years ago
parent
commit
fb235dc07f
  1. 2
      NEWS
  2. 1
      ext/standard/array.c
  3. 43
      ext/standard/tests/array/bug48854.phpt

2
NEWS

@ -4,6 +4,8 @@ PHP NEWS
- Fixed spl_autoload_unregister/spl_autoad_functions wrt. Closures and
Functors. (Christian Seiler)
- Fixed bug #48854 (array_merge_recursive modifies arrays after first one).
(Felipe)
- Fixed bug #48788 (RecursiveDirectoryIterator doesn't descend into symlinked
directories). (Ilia)
- Fixed bug #48771 (rename() between volumes fails and reports no error on

1
ext/standard/array.c

@ -2305,6 +2305,7 @@ static void php_array_merge_or_replace_wrapper(INTERNAL_FUNCTION_PARAMETERS, int
array_init_size(return_value, init_size);
for (i = 0; i < argc; i++) {
SEPARATE_ZVAL(args[i]);
if (!replace) {
php_array_merge(Z_ARRVAL_P(return_value), Z_ARRVAL_PP(args[i]), recursive TSRMLS_CC);
} else if (recursive && i > 0) { /* First array will be copied directly instead */

43
ext/standard/tests/array/bug48854.phpt

@ -0,0 +1,43 @@
--TEST--
Bug #48854 (array_merge_recursive modifies arrays after first one)
--FILE--
<?php
$array1 = array(
'friends' => 5,
'children' => array(
'dogs' => 0,
),
);
$array2 = array(
'friends' => 10,
'children' => array(
'cats' => 5,
),
);
$merged = array_merge_recursive($array1, $array2);
var_dump($array1, $array2);
?>
--EXPECTF--
array(2) {
[%u|b%"friends"]=>
int(5)
[%u|b%"children"]=>
array(1) {
[%u|b%"dogs"]=>
int(0)
}
}
array(2) {
[%u|b%"friends"]=>
int(10)
[%u|b%"children"]=>
array(1) {
[%u|b%"cats"]=>
int(5)
}
}
Loading…
Cancel
Save