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

Reply via email to