helly Mon Dec 22 11:27:15 2003 EDT Added files: /php-src/tests/classes array_access_007.phpt
Modified files: /ZendEngine2 zend_object_handlers.c /php-src NEWS Log: Fixed bug #26675 (Segfault on ArrayAccess use) Update NEWS Index: ZendEngine2/zend_object_handlers.c diff -u ZendEngine2/zend_object_handlers.c:1.84 ZendEngine2/zend_object_handlers.c:1.85 --- ZendEngine2/zend_object_handlers.c:1.84 Mon Dec 22 08:09:15 2003 +++ ZendEngine2/zend_object_handlers.c Mon Dec 22 11:27:13 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_object_handlers.c,v 1.84 2003/12/22 13:09:15 wez Exp $ */ +/* $Id: zend_object_handlers.c,v 1.85 2003/12/22 16:27:13 helly Exp $ */ #include "zend.h" #include "zend_globals.h" @@ -400,8 +400,13 @@ static void zend_std_write_dimension(zval *object, zval *offset, zval *value TSRMLS_DC) { zend_class_entry *ce = Z_OBJCE_P(object); + zval tmp; if (instanceof_function_ex(ce, zend_ce_arrayaccess, 1 TSRMLS_CC)) { + if (!offset) { + INIT_ZVAL(tmp); + offset = &tmp; + } zend_call_method_with_2_params(&object, ce, NULL, "offsetset", NULL, offset, value); } else { zend_error(E_ERROR, "Cannot use object of type %s as array", ce->name); Index: php-src/NEWS diff -u php-src/NEWS:1.1550 php-src/NEWS:1.1551 --- php-src/NEWS:1.1550 Sun Dec 21 13:30:31 2003 +++ php-src/NEWS Mon Dec 22 11:27:14 2003 @@ -1,5 +1,8 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +?? ??? 2004, PHP 5 RC 1 +- Fixed bug #26675 (Segfault on ArrayAccess use). (Marcus) + 21 Dec 2003, PHP 5 Beta 3 - Bundled new tidy extension (John, Wez) - Upgraded PCRE library to version 4.5. (Andrei) Index: php-src/tests/classes/array_access_007.phpt +++ php-src/tests/classes/array_access_007.phpt --TEST-- ZE2 ArrayAccess and [] assignment --FILE-- <?php class OverloadedArray implements ArrayAccess { public $realArray; function __construct() { $this->realArray = array(); } function offsetExists($index) { return array_key_exists($this->realArray, $index); } function offsetGet($index) { return $this->realArray[$index]; } function offsetSet($index, $value) { if (is_null($index)) { $this->realArray[] = $value; } else { $this->realArray[$index] = $value; } } function offsetUnset($index) { unset($this->realArray[$index]); } function dump() { var_dump($this->realArray); } } $a = new OverloadedArray; $a[] = 1; $a[1] = 2; $a[2] = 3; $a[] = 4; $a->dump(); ?> ===DONE=== --EXPECT-- array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) } ===DONE=== -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php