lbarnaud Sat Jul 26 12:34:11 2008 UTC Added files: (Branch: PHP_5_3) /php-src/ext/spl/tests bug45622.phpt
Modified files: /php-src NEWS /php-src/ext/spl spl_array.c Log: MFH: Fix bug #45622 (isset($arrayObject->p) misbehaves with ArrayObject::ARRAY_AS_PROPS set) http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.222&r2=1.2027.2.547.2.965.2.223&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.965.2.222 php-src/NEWS:1.2027.2.547.2.965.2.223 --- php-src/NEWS:1.2027.2.547.2.965.2.222 Fri Jul 25 08:27:37 2008 +++ php-src/NEWS Sat Jul 26 12:34:10 2008 @@ -222,6 +222,8 @@ - Fixed PECL bug #12431 (OCI8 ping functionality is broken). (Oracle Corp.) - Fixed PECL bug #12401 (Add support for ATTR_FETCH_TABLE_NAMES). (Johannes) +- Fixed bug #45622 (isset($arrayObject->p) misbehaves with ArrayObject:: + ARRAY_AS_PROPS set). (robin_fernandes at uk dot ibm dot com, Arnaud) - Fixed bug #45614 (ArrayIterator::current(), ::key() can show 1st private prop of wrapped object). (robin_fernandes at uk dot ibm dot com, Arnaud) - Fixed bug #45571 (ReflectionClass::export() shows superclasses' private http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_array.c?r1=1.71.2.17.2.13.2.18&r2=1.71.2.17.2.13.2.19&diff_format=u Index: php-src/ext/spl/spl_array.c diff -u php-src/ext/spl/spl_array.c:1.71.2.17.2.13.2.18 php-src/ext/spl/spl_array.c:1.71.2.17.2.13.2.19 --- php-src/ext/spl/spl_array.c:1.71.2.17.2.13.2.18 Thu Jul 24 15:54:41 2008 +++ php-src/ext/spl/spl_array.c Sat Jul 26 12:34:10 2008 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spl_array.c,v 1.71.2.17.2.13.2.18 2008/07/24 15:54:41 lbarnaud Exp $ */ +/* $Id: spl_array.c,v 1.71.2.17.2.13.2.19 2008/07/26 12:34:10 lbarnaud Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -695,13 +695,12 @@ { spl_array_object *intern = (spl_array_object*)zend_object_store_get_object(object TSRMLS_CC); - if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0) { - if (!std_object_handlers.has_property(object, member, 2 TSRMLS_CC)) { - return spl_array_has_dimension(object, member, has_set_exists TSRMLS_CC); - } - return 0; /* if prop doesn't exist at all mode 0/1 cannot return 1 */ + if (std_object_handlers.has_property(object, member, has_set_exists TSRMLS_CC)) { + return 1; + } else if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0) { + return spl_array_has_dimension(object, member, has_set_exists TSRMLS_CC); } - return std_object_handlers.has_property(object, member, has_set_exists TSRMLS_CC); + return 0; } /* }}} */ static void spl_array_unset_property(zval *object, zval *member TSRMLS_DC) /* {{{ */ http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/bug45622.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/bug45622.phpt +++ php-src/ext/spl/tests/bug45622.phpt --TEST-- SPL: Bug #45622 (isset($arrayObject->p) misbehaves with ArrayObject::ARRAY_AS_PROPS set --FILE-- <?php class C extends ArrayObject { public $p = 'object property'; } $ao = new C(array('p'=>'array element')); $ao->setFlags(ArrayObject::ARRAY_AS_PROPS); echo "\n--> Access the real property:\n"; var_dump(isset($ao->p)); var_dump($ao->p); echo "\n--> Remove the real property and access the array element:\n"; unset($ao->p); var_dump(isset($ao->p)); var_dump($ao->p); echo "\n--> Remove the array element and try access again:\n"; unset($ao->p); var_dump(isset($ao->p)); var_dump($ao->p); echo "\n--> Re-add the real property:\n"; $ao->p = 'object property'; var_dump(isset($ao->p)); var_dump($ao->p); ?> --EXPECTF-- --> Access the real property: bool(true) %unicode|string%(15) "object property" --> Remove the real property and access the array element: bool(true) %unicode|string%(13) "array element" --> Remove the array element and try access again: bool(false) Notice: Undefined index: p in %s on line %d NULL --> Re-add the real property: bool(true) %unicode|string%(15) "object property" -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php