lbarnaud                Thu May 14 16:44:54 2009 UTC

  Added files:                 (Branch: PHP_5_2)
    /php-src/ext/spl/tests      bug45622.phpt 

  Modified files:              
    /php-src/ext/spl/tests      arrayObject___construct_basic4.phpt 
                                arrayObject___construct_basic5.phpt 
                                arrayObject_setFlags_basic1.phpt 
                                arrayObject_magicMethods6.phpt 
    /php-src/ext/spl    spl_array.c 
  Log:
  MFB: Fixed bug #45622 (isset($arrayObject->p) misbehaves with 
  ArrayObject::ARRAY_AS_PROPS set)
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/arrayObject___construct_basic4.phpt?r1=1.1.2.1&r2=1.1.2.2&diff_format=u
Index: php-src/ext/spl/tests/arrayObject___construct_basic4.phpt
diff -u php-src/ext/spl/tests/arrayObject___construct_basic4.phpt:1.1.2.1 
php-src/ext/spl/tests/arrayObject___construct_basic4.phpt:1.1.2.2
--- php-src/ext/spl/tests/arrayObject___construct_basic4.phpt:1.1.2.1   Fri Oct 
17 14:26:36 2008
+++ php-src/ext/spl/tests/arrayObject___construct_basic4.phpt   Thu May 14 
16:44:54 2009
@@ -1,7 +1,5 @@
 --TEST--
 SPL: ArrayObject::__construct basic usage with ArrayObject::ARRAY_AS_PROPS. 
---XFAIL--
-Will fail until the fix to bug 45622 is backported from PHP53 to PHP52.
 --FILE--
 <?php
 class C {
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/arrayObject___construct_basic5.phpt?r1=1.1.2.1&r2=1.1.2.2&diff_format=u
Index: php-src/ext/spl/tests/arrayObject___construct_basic5.phpt
diff -u php-src/ext/spl/tests/arrayObject___construct_basic5.phpt:1.1.2.1 
php-src/ext/spl/tests/arrayObject___construct_basic5.phpt:1.1.2.2
--- php-src/ext/spl/tests/arrayObject___construct_basic5.phpt:1.1.2.1   Fri Oct 
17 14:26:36 2008
+++ php-src/ext/spl/tests/arrayObject___construct_basic5.phpt   Thu May 14 
16:44:54 2009
@@ -1,7 +1,5 @@
 --TEST--
 SPL: ArrayObject::__construct basic usage with 
ArrayObject::STD_PROP_LIST|ArrayObject::ARRAY_AS_PROPS.
---XFAIL--
-Will fail unless the PHP53 fix to bug 45622 is backported to PHP52
 --FILE--
 <?php
 class C {
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/arrayObject_setFlags_basic1.phpt?r1=1.1.2.1&r2=1.1.2.2&diff_format=u
Index: php-src/ext/spl/tests/arrayObject_setFlags_basic1.phpt
diff -u php-src/ext/spl/tests/arrayObject_setFlags_basic1.phpt:1.1.2.1 
php-src/ext/spl/tests/arrayObject_setFlags_basic1.phpt:1.1.2.2
--- php-src/ext/spl/tests/arrayObject_setFlags_basic1.phpt:1.1.2.1      Fri Oct 
17 14:26:36 2008
+++ php-src/ext/spl/tests/arrayObject_setFlags_basic1.phpt      Thu May 14 
16:44:54 2009
@@ -1,7 +1,5 @@
 --TEST--
 SPL: ArrayObject::setFlags basic usage with ArrayObject::ARRAY_AS_PROPS. 
---XFAIL--
-Currently fails on php.net due to bug 45622.
 --FILE--
 <?php
 class C extends ArrayObject {
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/tests/arrayObject_magicMethods6.phpt?r1=1.1.2.1&r2=1.1.2.2&diff_format=u
Index: php-src/ext/spl/tests/arrayObject_magicMethods6.phpt
diff -u php-src/ext/spl/tests/arrayObject_magicMethods6.phpt:1.1.2.1 
php-src/ext/spl/tests/arrayObject_magicMethods6.phpt:1.1.2.2
--- php-src/ext/spl/tests/arrayObject_magicMethods6.phpt:1.1.2.1        Fri Oct 
17 14:26:36 2008
+++ php-src/ext/spl/tests/arrayObject_magicMethods6.phpt        Thu May 14 
16:44:54 2009
@@ -133,8 +133,11 @@
 }
 
 --> isset existent, non-existent and dynamic:
+In UsesMagic::__isset(a)
 bool(true)
+In UsesMagic::__isset(nonexistent)
 bool(false)
+In UsesMagic::__isset(dynamic)
 bool(true)
   Original wrapped object:
 object(C)#%d (5) {
@@ -183,4 +186,4 @@
   int(3)
   ["priv:private"]=>
   string(6) "secret"
-}
\ No newline at end of file
+}
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_array.c?r1=1.71.2.17.2.23&r2=1.71.2.17.2.24&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.23 
php-src/ext/spl/spl_array.c:1.71.2.17.2.24
--- php-src/ext/spl/spl_array.c:1.71.2.17.2.23  Thu May 14 16:43:38 2009
+++ php-src/ext/spl/spl_array.c Thu May 14 16:44:54 2009
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_array.c,v 1.71.2.17.2.23 2009/05/14 16:43:38 lbarnaud Exp $ */
+/* $Id: spl_array.c,v 1.71.2.17.2.24 2009/05/14 16:44:54 lbarnaud Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -671,13 +671,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