sebastian               Sat Apr  4 14:36:23 2009 UTC

  Modified files:              (Branch: PHP_5_3)
    /php-src/ext/reflection     php_reflection.c 
    /php-src/ext/reflection/tests       reflectionProperty_setAccessible.phpt 
    /php-src    NEWS 
  Log:
  MFH: Fix issue reported by Roman Borschel.
  
http://cvs.php.net/viewvc.cgi/php-src/ext/reflection/php_reflection.c?r1=1.164.2.33.2.45.2.54&r2=1.164.2.33.2.45.2.55&diff_format=u
Index: php-src/ext/reflection/php_reflection.c
diff -u php-src/ext/reflection/php_reflection.c:1.164.2.33.2.45.2.54 
php-src/ext/reflection/php_reflection.c:1.164.2.33.2.45.2.55
--- php-src/ext/reflection/php_reflection.c:1.164.2.33.2.45.2.54        Thu Apr 
 2 21:30:09 2009
+++ php-src/ext/reflection/php_reflection.c     Sat Apr  4 14:36:22 2009
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_reflection.c,v 1.164.2.33.2.45.2.54 2009/04/02 21:30:09 iliaa Exp 
$ */
+/* $Id: php_reflection.c,v 1.164.2.33.2.45.2.55 2009/04/04 14:36:22 sebastian 
Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -4491,7 +4491,7 @@
                        return;
                }
                zend_unmangle_property_name(ref->prop.name, 
ref->prop.name_length, &class_name, &prop_name);
-               member_p = zend_read_property(Z_OBJCE_P(object), object, 
prop_name, strlen(prop_name), 1 TSRMLS_CC);
+               member_p = zend_read_property(ref->ce, object, prop_name, 
strlen(prop_name), 1 TSRMLS_CC);
                *return_value= *member_p;
                zval_copy_ctor(return_value);
                INIT_PZVAL(return_value);
@@ -4569,7 +4569,7 @@
                        return;
                }
                zend_unmangle_property_name(ref->prop.name, 
ref->prop.name_length, &class_name, &prop_name);
-               zend_update_property(Z_OBJCE_P(object), object, prop_name, 
strlen(prop_name), value TSRMLS_CC);
+               zend_update_property(ref->ce, object, prop_name, 
strlen(prop_name), value TSRMLS_CC);
        }
 }
 /* }}} */
@@ -5437,7 +5437,7 @@
        php_info_print_table_start();
        php_info_print_table_header(2, "Reflection", "enabled");
 
-       php_info_print_table_row(2, "Version", "$Revision: 1.164.2.33.2.45.2.54 
$");
+       php_info_print_table_row(2, "Version", "$Revision: 1.164.2.33.2.45.2.55 
$");
 
        php_info_print_table_end();
 } /* }}} */
@@ -5451,7 +5451,7 @@
        NULL,
        NULL,
        PHP_MINFO(reflection),
-       "$Revision: 1.164.2.33.2.45.2.54 $",
+       "$Revision: 1.164.2.33.2.45.2.55 $",
        STANDARD_MODULE_PROPERTIES
 }; /* }}} */
 
http://cvs.php.net/viewvc.cgi/php-src/ext/reflection/tests/reflectionProperty_setAccessible.phpt?r1=1.1.2.4&r2=1.1.2.5&diff_format=u
Index: php-src/ext/reflection/tests/reflectionProperty_setAccessible.phpt
diff -u 
php-src/ext/reflection/tests/reflectionProperty_setAccessible.phpt:1.1.2.4 
php-src/ext/reflection/tests/reflectionProperty_setAccessible.phpt:1.1.2.5
--- php-src/ext/reflection/tests/reflectionProperty_setAccessible.phpt:1.1.2.4  
Sat Nov 29 15:58:54 2008
+++ php-src/ext/reflection/tests/reflectionProperty_setAccessible.phpt  Sat Apr 
 4 14:36:23 2009
@@ -9,6 +9,8 @@
     private static $privateStatic = 'd';
 }
 
+class B extends A {}
+
 $a               = new A;
 $protected       = new ReflectionProperty($a, 'protected');
 $protectedStatic = new ReflectionProperty('A', 'protectedStatic');
@@ -66,6 +68,52 @@
 var_dump($protectedStatic->getValue());
 var_dump($private->getValue($a));
 var_dump($privateStatic->getValue());
+
+$a               = new A;
+$b               = new B;
+$protected       = new ReflectionProperty($b, 'protected');
+$protectedStatic = new ReflectionProperty('B', 'protectedStatic');
+$private         = new ReflectionProperty($a, 'private');
+
+try {
+    var_dump($protected->getValue($b));
+}
+
+catch (ReflectionException $e) {
+    var_dump($e->getMessage());
+}
+
+try {
+    var_dump($protectedStatic->getValue());
+}
+
+catch (ReflectionException $e) {
+    var_dump($e->getMessage());
+}
+
+try {
+    var_dump($private->getValue($b));
+}
+
+catch (ReflectionException $e) {
+    var_dump($e->getMessage());
+}
+
+$protected->setAccessible(TRUE);
+$protectedStatic->setAccessible(TRUE);
+$private->setAccessible(TRUE);
+
+var_dump($protected->getValue($b));
+var_dump($protectedStatic->getValue());
+var_dump($private->getValue($b));
+
+$protected->setValue($b, 'e');
+$protectedStatic->setValue('f');
+$private->setValue($b, 'g');
+
+var_dump($protected->getValue($b));
+var_dump($protectedStatic->getValue());
+var_dump($private->getValue($b));
 ?>
 --EXPECT--
 string(44) "Cannot access non-public member A::protected"
@@ -80,3 +128,12 @@
 string(1) "f"
 string(1) "g"
 string(1) "h"
+string(44) "Cannot access non-public member B::protected"
+string(50) "Cannot access non-public member B::protectedStatic"
+string(42) "Cannot access non-public member A::private"
+string(1) "a"
+string(1) "f"
+string(1) "c"
+string(1) "e"
+string(1) "f"
+string(1) "g"
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.551&r2=1.2027.2.547.2.965.2.552&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.965.2.551 
php-src/NEWS:1.2027.2.547.2.965.2.552
--- php-src/NEWS:1.2027.2.547.2.965.2.551       Thu Apr  2 16:41:23 2009
+++ php-src/NEWS        Sat Apr  4 14:36:23 2009
@@ -29,6 +29,8 @@
   update). (Matteo)
 - Fixed bug #42362 (HTTP status codes 204 and 304 should not be gzipped).
   (Scott, Edward Z. Yang)
+- Fixed an issue with ReflectionProperty::setAccessible().
+  (Sebastian, Roman Borschel)
 
 
 24 Mar 2009, PHP 5.3.0 RC 1



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

Reply via email to