From: pumuckel at metropolis dot de Operating system: Linux PHP version: 5.0.4 PHP Bug Type: Arrays related Bug description: nested array_walk function broken
Description: ------------ Nested array_walk calls don't work. Reason: BG(array_walk_fci_cache) will not get re-initialized after inner array_walk call. Following patch will help - better solution would be a local array_walk_fci_cache var inside the php_walk_array function: diff -u php-5.0.4/ext/standard/array.c php-5.0.4.patched/ext/standard/array.c --- php-5.0.4/ext/standard/array.c 2005-03-12 11:12:49.000000000 +0100 +++ php-5.0.4.patched/ext/standard/array.c 2005-06-09 19:31:43.000000000 +0200 @@ -1079,6 +1079,8 @@ } zend_hash_move_forward_ex(target_hash, &pos); } + + BG(array_walk_fci_cache) = empty_fcall_info_cache; return 0; } Reproduce code: --------------- <?php function test_subfunc(&$item1, $key, &$prefix) { echo " test_subfunc<br/>"; } function test_func($item2, $key) { echo "test_func<br/>"; $arr = array(1, 2, 3, 4); array_walk($arr, 'test_subfunc', 'extra_arg'); } $x = array(5,6,7); array_walk($x, 'test_func'); ?> Expected result: ---------------- test_func test_subfunc test_subfunc test_subfunc test_subfunc test_func test_subfunc test_subfunc test_subfunc test_subfunc test_func test_subfunc test_subfunc test_subfunc test_subfunc Actual result: -------------- test_func test_subfunc test_subfunc test_subfunc test_subfunc Warning: Missing argument 3 for test_subfunc() in foo.php on line 3 test_subfunc test_subfunc -- Edit bug report at http://bugs.php.net/?id=33286&edit=1 -- Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=33286&r=trysnapshot4 Try a CVS snapshot (php5.0): http://bugs.php.net/fix.php?id=33286&r=trysnapshot50 Try a CVS snapshot (php5.1): http://bugs.php.net/fix.php?id=33286&r=trysnapshot51 Fixed in CVS: http://bugs.php.net/fix.php?id=33286&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=33286&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=33286&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=33286&r=needscript Try newer version: http://bugs.php.net/fix.php?id=33286&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=33286&r=support Expected behavior: http://bugs.php.net/fix.php?id=33286&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=33286&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=33286&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=33286&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=33286&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=33286&r=dst IIS Stability: http://bugs.php.net/fix.php?id=33286&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=33286&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=33286&r=float No Zend Extensions: http://bugs.php.net/fix.php?id=33286&r=nozend MySQL Configuration Error: http://bugs.php.net/fix.php?id=33286&r=mysqlcfg