From: Felipe Pena Date: Wed, 8 Jul 2009 18:21:13 +0000 (+0000) Subject: - Fixed bug #48854 (array_merge_recursive modifies arrays after first one) X-Git-Tag: php-5.4.0alpha1~191^2~3133 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0977b2a6f8ee06ab5ebab9a380422305abe2803a;p=php - Fixed bug #48854 (array_merge_recursive modifies arrays after first one) --- diff --git a/ext/standard/array.c b/ext/standard/array.c index 57f15946ce..922bb6e830 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -2473,6 +2473,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 */ diff --git a/ext/standard/tests/array/bug48854.phpt b/ext/standard/tests/array/bug48854.phpt new file mode 100644 index 0000000000..0908637503 --- /dev/null +++ b/ext/standard/tests/array/bug48854.phpt @@ -0,0 +1,43 @@ +--TEST-- +Bug #48854 (array_merge_recursive modifies arrays after first one) +--FILE-- + 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) + } +}