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