summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--Zend/tests/bug43483.phpt24
-rw-r--r--Zend/zend_builtin_functions.c2
3 files changed, 27 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index b18feed911..4cfd3ca76f 100644
--- 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
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 2ddb0cbedd..bd84c263f1 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -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;