|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2006-10-29 13:50 UTC] jeff at procata dot com
Description:
------------
I'm getting a reproducable Bus Error / Segfault with PHP
CLI. The same occurs in 5.1.2, 5.1.6 and 5.2.0rc4.
The error is reproducible, but difficult to isolate into
a small example.
Reproduce code:
---------------
The code that triggers the segfault is similiar to
ByRef($this->obj['test'], $this->obj);
Where
function byRef(&$first, &$second)
and obj implements ArrayAccess with a method
public function offsetGet($offset) {
$cannonicalName = strtolower($offset);
return $this->children[$cannonicalName];
}
Expected result:
----------------
PHP Fatal error: Objects used as arrays in post/pre
increment/decrement must return values by reference
Actual result:
--------------
Program received signal EXC_BAD_ACCESS, Could not access
memory.
_zend_is_inconsistent (ht=0xffffffff, file=0x1 <Address
0x1 out of bounds>, line=112) at /Users/jeff/Downloads/
php-5.1.6/Zend/zend_hash.c:53
53 if (ht->inconsistent==HT_OK) {
(gdb) bt
#0 _zend_is_inconsistent (ht=0xffffffff, file=0x1
<Address 0x1 out of bounds>, line=112) at /Users/jeff/
Downloads/php-5.1.6/Zend/zend_hash.c:53
#1 0x001b7f68 in zend_hash_destroy (ht=0xffffffff) at /
Users/jeff/Downloads/php-5.1.6/Zend/zend_hash.c:512
#2 0x001c7130 in zend_object_std_dtor
(object=0x2134c98) at /Users/jeff/Downloads/php-5.1.6/
Zend/zend_objects.c:40
#3 0x001c73c8 in zend_objects_free_object_storage
(object=0x2134c98) at /Users/jeff/Downloads/php-5.1.6/
Zend/zend_objects.c:111
#4 0x001ca5d8 in zend_objects_store_free_object_storage
(objects=0xffffffff) at /Users/jeff/Downloads/php-5.1.6/
Zend/zend_objects_API.c:86
#5 0x0019fa74 in shutdown_executor () at /Users/jeff/
Downloads/php-5.1.6/Zend/zend_execute_API.c:281
#6 0x001add74 in zend_deactivate () at /Users/jeff/
Downloads/php-5.1.6/Zend/zend.c:854
#7 0x00169c5c in php_request_shutdown
(dummy=0xffffffff) at /Users/jeff/Downloads/php-5.1.6/
main/main.c:1292
#8 0x00232284 in main (argc=4, argv=0xbffffde0) at /
Users/jeff/Downloads/php-5.1.6/sapi/cli/php_cli.c:1246
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Oct 30 01:00:01 2025 UTC |
Got it. :) <?php function compareByRef(&$first, &$second) { return $first === $second; } class MyTree implements ArrayAccess { public $parent; public $children = array(); public function offsetExists($offset) {} public function offsetUnset($offset) {} public function offsetSet($offset, $value) { $cannonicalName = strtolower($offset); $this->children[$cannonicalName] = $value; $value->parent = $this; } public function offsetGet($offset) { $cannonicalName = strtolower($offset); return $this->children[$cannonicalName]; } } $id = 'Test'; $root = new MyTree(); $child = new MyTree(); $root[$id] = $child; var_dump(compareByRef($root[$id], $child)); ?>