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