summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/tests/bug43483.phpt24
-rw-r--r--Zend/zend_builtin_functions.c2
2 files changed, 25 insertions, 1 deletions
diff --git a/Zend/tests/bug43483.phpt b/Zend/tests/bug43483.phpt
new file mode 100644
index 0000000000..0cfbfe8780
--- /dev/null
+++ b/Zend/tests/bug43483.phpt
@@ -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
+)
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 022b26c45c..4c9f37185b 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -904,7 +904,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)))) {
zstr key;