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 "&nbsp;&nbsp;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

Reply via email to