#31185 [Ver->Csd]: Crash when exceptions thrown from ArrayAccess::offsetUnset()
| From: | helly@php.net | Date: | Sat, 19 Mar 2005 18:53:21 +0000 |
| Subject: | #31185 [Ver->Csd]: Crash when exceptions thrown from ArrayAccess::offsetUnset() | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-75530@lists.php.net to get a copy of this message | ||
ID: 31185
Updated by: helly@php.net
Reported By: Jason at AMP-design dot net
-Status: Verified
+Status: Closed
Bug Type: SPL related
Operating System: *
PHP Version: 5.0.3
Assigned To: helly
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:
------------------------------------------------------------------------
[2005-01-11 16:41:41] Jason at amp-design dot net
Just to let you know this bug also occurs when you throw exceptions
from other internal SPL methods. For instance, if an exception is
thrown in Iterator::current() PHP will crash.
Interestingly enough, when I ran this on the command line version of
PHP (under Mac OS), where the Exception is thrown, it echos "Bus error"
on to the console. I have no idea what a "bus" has to do with this, but
it might help you track the problem.
I guess it would be worth checking other methods in the SPL for this
bug seeing as it occurs in various interfaces that bind into core parts
of the Zend engine.
------------------------------------------------------------------------
[2004-12-19 16:56:06] Jason at AMP-design dot net
Description:
------------
This crashes both on PHP 5.0.3 on Windows 2003 / Apache 2.0.52 and
Centos 3 (Redhat Entperise Linux 3 for cheapskates) with Apache 2.0.48
and PHP 5.0.2
This occurs due to the Exception thrown. Removing the exception will
prevent the crash.
Reproduce code:
---------------
<?php
header('Content-type: text/plain');
class FooBar implements ArrayAccess {
private $array = array();
public function offsetExists($index) {
return isset($this->array[$index]);
}
public function offsetGet($index) {
return $this->array[$index];
}
public function offsetSet($index, $value) {
$this->array[$index] = $value;
}
public function offsetUnset($index) {
throw new Exception('Just try and make me crash ya sucker ;-)');
unset($this->array[$index]);
}
}
$i = 0;
$foo = new FooBar();
$foo[$i] = $i++;
$foo[$i] = $i++;
$foo[$i] = $i++;
unset($foo[1]);
print_R($foo);
?>
Expected result:
----------------
$foo would dump out it's array elements which should be 0 and 2
Actual result:
--------------
Apache crash (exists with Parent: child process exited with status
3221225477 -- Restarting on Windows Apache 2 log, dunno about Linux,
can't be faffed to mess about in SSH, however I do not get a HTTP
reponse, and therefore I assume it segfaults)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=31185&edit=1