#31185 [Ver->Csd]: Crash when exceptions thrown from ArrayAccess::offsetUnset()

From: 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

« previous php.bugs (#75530) next »