logo       
Google Custom Search
    AddThis Social Bookmark Button

cvs: ZendEngine2 / zend_builtin_functions.c /tests bug32296.phpt: msg#00009

Subject: cvs: ZendEngine2 / zend_builtin_functions.c /tests bug32296.phpt
dmitry          Tue May  3 04:52:04 2005 EDT

  Modified files:              
    /ZendEngine2        zend_builtin_functions.c 
    /ZendEngine2/tests  bug32296.phpt 
  Log:
  Fixed bug #32296 (get_class_methods output has changed between 5.0.2 and 
5.0.3)
  Now get_class_methods() shows accessible private and protected methods if it 
is called from class scope.
  
  
http://cvs.php.net/diff.php/ZendEngine2/zend_builtin_functions.c?r1=1.269&r2=1.270&ty=u
Index: ZendEngine2/zend_builtin_functions.c
diff -u ZendEngine2/zend_builtin_functions.c:1.269 
ZendEngine2/zend_builtin_functions.c:1.270
--- ZendEngine2/zend_builtin_functions.c:1.269  Mon May  2 12:18:01 2005
+++ ZendEngine2/zend_builtin_functions.c        Tue May  3 04:52:02 2005
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_builtin_functions.c,v 1.269 2005/05/02 16:18:01 helly Exp $ */
+/* $Id: zend_builtin_functions.c,v 1.270 2005/05/03 08:52:02 dmitry Exp $ */
 
 #include "zend.h"
 #include "zend_API.h"
@@ -812,7 +812,6 @@
        zend_class_entry *ce = NULL, **pce;
        HashPosition pos;
        zend_function *mptr;
-       int instanceof;
 
        if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &class)==FAILURE) 
{
                ZEND_WRONG_PARAM_COUNT();
@@ -834,14 +833,16 @@
                RETURN_NULL();
        }
 
-       instanceof = EG(scope) && instanceof_function(EG(scope), ce TSRMLS_CC);
-
        array_init(return_value);
        zend_hash_internal_pointer_reset_ex(&ce->function_table, &pos);
 
        while (zend_hash_get_current_data_ex(&ce->function_table, (void **) 
&mptr, &pos) == SUCCESS) {
                if ((mptr->common.fn_flags & ZEND_ACC_PUBLIC) 
-                || (instanceof && ((mptr->common.fn_flags & 
ZEND_ACC_PROTECTED) || EG(scope) == mptr->common.scope))) {
+                || (EG(scope) &&
+                    (((mptr->common.fn_flags & ZEND_ACC_PROTECTED) &&
+                      instanceof_function(EG(scope), mptr->common.scope 
TSRMLS_CC))
+                  || ((mptr->common.fn_flags & ZEND_ACC_PRIVATE) &&
+                      EG(scope) == mptr->common.scope)))) {
                        MAKE_STD_ZVAL(method_name);
                        ZVAL_STRING(method_name, mptr->common.function_name, 1);
                        zend_hash_next_index_insert(return_value->value.ht, 
&method_name, sizeof(zval *), NULL);
http://cvs.php.net/diff.php/ZendEngine2/tests/bug32296.phpt?r1=1.1&r2=1.2&ty=u
Index: ZendEngine2/tests/bug32296.phpt
diff -u /dev/null ZendEngine2/tests/bug32296.phpt:1.2
--- /dev/null   Tue May  3 04:52:04 2005
+++ ZendEngine2/tests/bug32296.phpt     Tue May  3 04:52:04 2005
@@ -0,0 +1,60 @@
+--TEST--
+Bug #32296 get_class_methods output has changed between 5.0.2 and 5.0.3 
+--FILE--
+<?php
+abstract class space{
+       function __construct(){}
+       abstract protected function unfold();
+}
+
+abstract class shape extends space{
+       private function x1() {}
+       protected final function unfold(){}
+}
+
+abstract class quad extends shape{
+       private function x2() {}
+       function buggy(){
+               $c = get_class($this);
+               $a = get_class_methods(get_class($this));
+               $b = get_class_methods($this);
+               print($c."\n".'a:');
+               print_r($a);
+               print('b:');
+               print_r($b);
+       }
+}
+
+class square extends quad{}
+
+$a = new square();
+$a->buggy();
+print_r(get_class_methods("square"));
+print_r(get_class_methods($a));
+?>
+--EXPECT--
+square
+a:Array
+(
+    [0] => x2
+    [1] => buggy
+    [2] => unfold
+    [3] => __construct
+)
+b:Array
+(
+    [0] => x2
+    [1] => buggy
+    [2] => unfold
+    [3] => __construct
+)
+Array
+(
+    [0] => buggy
+    [1] => __construct
+)
+Array
+(
+    [0] => buggy
+    [1] => __construct
+)

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




<Prev in Thread] Current Thread [Next in Thread>