cataphract                               Tue, 26 Oct 2010 18:47:10 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=304935

Log:
- Fixed ReflectionProperty::isDefault() giving a wrong result for properties
  obtained with ReflectionClass::getProperties().

Changed paths:
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/ext/reflection/php_reflection.c
    A   
php/php-src/branches/PHP_5_3/ext/reflection/tests/ReflectionParameter_isDefault.phpt
    U   php/php-src/trunk/ext/reflection/php_reflection.c
    A   
php/php-src/trunk/ext/reflection/tests/ReflectionParameter_isDefault.phpt

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS   2010-10-26 18:10:04 UTC (rev 304934)
+++ php/php-src/branches/PHP_5_3/NEWS   2010-10-26 18:47:10 UTC (rev 304935)
@@ -41,6 +41,8 @@
   sequences. (Gustavo)
 - Fixed bug #52929 (Segfault in filter_var with FILTER_VALIDATE_EMAIL with
   large amount of data) (CVE-2010-3710). (Adam)
+- Fixed ReflectionProperty::isDefault() giving a wrong result for properties
+  obtained with ReflectionClass::getProperties(). (Gustavo)

 - Fixed bug #53144 (Segfault in SplObjectStorage::removeAll()). (Felipe)
 - Fixed bug #53071 (SPLObjectStorage defeats gc_collect_cycles). (Gustavo)

Modified: php/php-src/branches/PHP_5_3/ext/reflection/php_reflection.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/reflection/php_reflection.c        
2010-10-26 18:10:04 UTC (rev 304934)
+++ php/php-src/branches/PHP_5_3/ext/reflection/php_reflection.c        
2010-10-26 18:47:10 UTC (rev 304935)
@@ -3660,6 +3660,7 @@
        ZVAL_STRINGL(&member, hash_key->arKey, hash_key->nKeyLength-1, 0);
        if (zend_get_property_info(ce, &member, 1 TSRMLS_CC) == 
&EG(std_property_info)) {
                MAKE_STD_ZVAL(property);
+               EG(std_property_info).flags = ZEND_ACC_IMPLICIT_PUBLIC;
                reflection_property_factory(ce, &EG(std_property_info), 
property TSRMLS_CC);
                add_next_index_zval(retval, property);
        }

Added: 
php/php-src/branches/PHP_5_3/ext/reflection/tests/ReflectionParameter_isDefault.phpt
===================================================================
--- 
php/php-src/branches/PHP_5_3/ext/reflection/tests/ReflectionParameter_isDefault.phpt
                                (rev 0)
+++ 
php/php-src/branches/PHP_5_3/ext/reflection/tests/ReflectionParameter_isDefault.phpt
        2010-10-26 18:47:10 UTC (rev 304935)
@@ -0,0 +1,34 @@
+--TEST--
+ReflectionParameter::isDefault()
+--FILE--
+<?php
+class A {
+public $defprop;
+}
+$a = new A;
+$a->myprop = null;
+
+$ro = new ReflectionObject($a);
+$props = $ro->getProperties();
+$prop1 = $props[0];
+var_dump($prop1->isDefault());
+$prop2 = $props[1];
+var_dump($prop2->isDefault());
+
+var_dump($ro->getProperty('defprop')->isDefault());
+var_dump($ro->getProperty('myprop')->isDefault());
+
+$prop1 = new ReflectionProperty($a, 'defprop');
+$prop2 = new ReflectionProperty($a, 'myprop');
+var_dump($prop1->isDefault());
+var_dump($prop2->isDefault());
+?>
+==DONE==
+--EXPECT--
+bool(true)
+bool(false)
+bool(true)
+bool(false)
+bool(true)
+bool(false)
+==DONE==

Modified: php/php-src/trunk/ext/reflection/php_reflection.c
===================================================================
--- php/php-src/trunk/ext/reflection/php_reflection.c   2010-10-26 18:10:04 UTC 
(rev 304934)
+++ php/php-src/trunk/ext/reflection/php_reflection.c   2010-10-26 18:47:10 UTC 
(rev 304935)
@@ -3902,6 +3902,7 @@
        ZVAL_STRINGL(&member, hash_key->arKey, hash_key->nKeyLength-1, 0);
        if (zend_get_property_info(ce, &member, 1 TSRMLS_CC) == 
&EG(std_property_info)) {
                MAKE_STD_ZVAL(property);
+               EG(std_property_info).flags = ZEND_ACC_IMPLICIT_PUBLIC;
                reflection_property_factory(ce, &EG(std_property_info), 
property TSRMLS_CC);
                add_next_index_zval(retval, property);
        }

Added: php/php-src/trunk/ext/reflection/tests/ReflectionParameter_isDefault.phpt
===================================================================
--- php/php-src/trunk/ext/reflection/tests/ReflectionParameter_isDefault.phpt   
                        (rev 0)
+++ php/php-src/trunk/ext/reflection/tests/ReflectionParameter_isDefault.phpt   
2010-10-26 18:47:10 UTC (rev 304935)
@@ -0,0 +1,34 @@
+--TEST--
+ReflectionParameter::isDefault()
+--FILE--
+<?php
+class A {
+public $defprop;
+}
+$a = new A;
+$a->myprop = null;
+
+$ro = new ReflectionObject($a);
+$props = $ro->getProperties();
+$prop1 = $props[0];
+var_dump($prop1->isDefault());
+$prop2 = $props[1];
+var_dump($prop2->isDefault());
+
+var_dump($ro->getProperty('defprop')->isDefault());
+var_dump($ro->getProperty('myprop')->isDefault());
+
+$prop1 = new ReflectionProperty($a, 'defprop');
+$prop2 = new ReflectionProperty($a, 'myprop');
+var_dump($prop1->isDefault());
+var_dump($prop2->isDefault());
+?>
+==DONE==
+--EXPECT--
+bool(true)
+bool(false)
+bool(true)
+bool(false)
+bool(true)
+bool(false)
+==DONE==

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to