]> granicus.if.org Git - php/commitdiff
Fixed bug #43483 (get_class_methods() does not list all visible methods)
authorDmitry Stogov <dmitry@php.net>
Thu, 21 Feb 2008 15:14:13 +0000 (15:14 +0000)
committerDmitry Stogov <dmitry@php.net>
Thu, 21 Feb 2008 15:14:13 +0000 (15:14 +0000)
NEWS
Zend/tests/bug43483.phpt [new file with mode: 0644]
Zend/zend_builtin_functions.c

diff --git a/NEWS b/NEWS
index b18feed911a50c5d4fdcbff092d14b9e3e2f1344..4cfd3ca76fa8f6d80dfe76edb947d1ea7783b1ff 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -81,6 +81,8 @@ PHP                                                                        NEWS
   is not available). (Ilia)
 - Fixed bug #43491 (Under certain conditions, file_exists() never returns).
   (Dmitry)
+- Fixed bug #43483 (get_class_methods() does not list all visible methods).
+  (Dmitry)
 - Fixed bug #43482 (array_pad() does not warn on very small pad numbers).
   (Ilia)
 - Fixed bug #43457 (Prepared statement with incorrect parms doesn't throw
diff --git a/Zend/tests/bug43483.phpt b/Zend/tests/bug43483.phpt
new file mode 100644 (file)
index 0000000..0cfbfe8
--- /dev/null
@@ -0,0 +1,24 @@
+--TEST--
+Bug #43483 (get_class_methods() does not list all visible methods)
+--FILE--
+<?php
+class C {
+       public static function test() {
+               D::prot();
+               print_r(get_class_methods("D"));
+       }
+}
+class D extends C {
+       protected static function prot() {
+               echo "Successfully called D::prot().\n";
+       }
+}
+D::test();
+?>
+--EXPECT--
+Successfully called D::prot().
+Array
+(
+    [0] => prot
+    [1] => test
+)
index 2ddb0cbedd542cdb82e3e9d8d53d24f0d65bee68..bd84c263f155596539975c9b280ba93360b2acc7 100644 (file)
@@ -867,7 +867,7 @@ ZEND_FUNCTION(get_class_methods)
                if ((mptr->common.fn_flags & ZEND_ACC_PUBLIC) 
                 || (EG(scope) &&
                     (((mptr->common.fn_flags & ZEND_ACC_PROTECTED) &&
-                      instanceof_function(EG(scope), mptr->common.scope TSRMLS_CC))
+                      zend_check_protected(mptr->common.scope, EG(scope)))
                   || ((mptr->common.fn_flags & ZEND_ACC_PRIVATE) &&
                       EG(scope) == mptr->common.scope)))) {
                        char *key;