felipe Wed Jul 8 18:21:13 2009 UTC Added files: /php-src/ext/standard/tests/array bug48854.phpt
Modified files: /php-src/ext/standard array.c Log: - Fixed bug #48854 (array_merge_recursive modifies arrays after first one) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.478&r2=1.479&diff_format=u Index: php-src/ext/standard/array.c diff -u php-src/ext/standard/array.c:1.478 php-src/ext/standard/array.c:1.479 --- php-src/ext/standard/array.c:1.478 Fri May 15 17:02:34 2009 +++ php-src/ext/standard/array.c Wed Jul 8 18:21:13 2009 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: array.c,v 1.478 2009/05/15 17:02:34 moriyoshi Exp $ */ +/* $Id: array.c,v 1.479 2009/07/08 18:21:13 felipe Exp $ */ #include "php.h" #include "php_ini.h" @@ -2473,6 +2473,7 @@ 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 */ http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/bug48854.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/array/bug48854.phpt +++ php-src/ext/standard/tests/array/bug48854.phpt --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) } } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php