From 0977b2a6f8ee06ab5ebab9a380422305abe2803a Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Wed, 8 Jul 2009 18:21:13 +0000 Subject: [PATCH] - Fixed bug #48854 (array_merge_recursive modifies arrays after first one) --- ext/standard/array.c | 1 + ext/standard/tests/array/bug48854.phpt | 43 ++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 ext/standard/tests/array/bug48854.phpt 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) + } +} -- 2.50.1