#42752 [Opn->Csd]: array_walk_recursive with recursive array depth>1 crashes
| From: | tony2001@php.net | Date: | Tue, 02 Oct 2007 10:05:10 +0000 |
| Subject: | #42752 [Opn->Csd]: array_walk_recursive with recursive array depth>1 crashes | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-118061@lists.php.net to get a copy of this message | ||
ID: 42752
Updated by: tony2001@php.net
Reported By: rob_nicholson at uk dot ibm dot com
-Status: Open
+Status: Closed
Bug Type: Reproducible crash
Operating System: windows XP, Ubuntu
PHP Version: 6CVS-2007-09-25 (snap)
New Comment:
This bug has been fixed in CVS.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
Thank you for the report, and for helping us make PHP better.
Previous Comments:
------------------------------------------------------------------------
[2007-09-25 07:27:16] rob_nicholson at uk dot ibm dot com
Description:
------------
array_walk_recursive contains code to detect recursion in arrays where
the recursion depth is 1. But deeper recursion is not detected, leading
to the code recursing until the stack depth becomes too great and a
crash occurs.
It seems clear from the code that the problem is in php_array_walk in
ext/standard/array.c. The following test only detects single level
recursion:
if (thash == target_hash) {
php_error_docref(NULL TSRMLS_CC,
E_WARNING, "recursion detected");
return 0;
}
Reproduce code:
---------------
<?php
function myfunc($value,$key) { echo "value: $value, key: $key \n";}
$a=array(array(),"foo"=>"bar");
$a[0][]=&$a;
array_walk_recursive($a,"myfunc");
echo "reached end \n";
?>
Expected result:
----------------
value: bar, key: foo
reached end
Actual result:
--------------
Segmentation fault
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=42752&edit=1