]> granicus.if.org Git - php/commitdiff
Fixed bug #64592
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 28 Feb 2020 14:53:04 +0000 (15:53 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 28 Feb 2020 14:54:42 +0000 (15:54 +0100)
Make ReflectionClass::getMethods() behave the same ways as
ReflectionClass::getProperties() by not including private methods
from parent classes.

NEWS
ext/reflection/php_reflection.c
ext/reflection/tests/ReflectionClass_getMethods_001.phpt
ext/reflection/tests/ReflectionMethod_getModifiers_basic.phpt

diff --git a/NEWS b/NEWS
index f9a3a46761042c3892d95d42888bb5227bf50abe..632383ed7011864737024ad430331d1cf7eb5214 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -85,6 +85,8 @@ PHP                                                                        NEWS
     message with traits). (villfa)
   . Implement ReflectionProperty::hasDefaultValue and
     Reflection::getDefaultValue (beberlei)
+  . Fixed bug #64592 (ReflectionClass::getMethods() returns methods out of
+    scope). (Nikita)
 
 - Session:
   . Fixed bug #78624 (session_gc return value for user defined session
index 101913c4940d7519f32ffbb86d65e52c5ba3e1f5..628d4f30ace1cc7cd2685dd207f9b93ad8f02594 100644 (file)
@@ -4056,6 +4056,10 @@ ZEND_METHOD(reflection_class, getMethod)
 /* {{{ _addmethod */
 static void _addmethod(zend_function *mptr, zend_class_entry *ce, zval *retval, zend_long filter)
 {
+       if ((mptr->common.fn_flags & ZEND_ACC_PRIVATE) && mptr->common.scope != ce) {
+               return;
+       }
+
        if (mptr->common.fn_flags & filter) {
                zval method;
                reflection_method_factory(ce, mptr, NULL, &method);
index 1f2ed55ffb5885cc2ab08f226876bcc0d7872111..4e008e8710abf2ac43fcea01bf07ef0643b9eff0 100644 (file)
@@ -122,19 +122,5 @@ array(2) {
   }
 }
 Reflecting on class subprivf: 
-array(2) {
-  [0]=>
-  object(ReflectionMethod)#%d (2) {
-    ["name"]=>
-    string(1) "f"
-    ["class"]=>
-    string(5) "privf"
-  }
-  [1]=>
-  object(ReflectionMethod)#%d (2) {
-    ["name"]=>
-    string(1) "s"
-    ["class"]=>
-    string(5) "privf"
-  }
+array(0) {
 }
index 00c1514fd9a89d0952d96f5263b6a2944e4edfb4..70038c31a088d4ef042c53b4e7c7008245352caf 100644 (file)
@@ -81,7 +81,7 @@ echo "ReflectionMethod::getModifiers() modifiers:\n";
 printf("0x%08x\n", $a->getModifiers());
 
 ?>
---EXPECTF--
+--EXPECT--
 Modifiers for method TestClass::foo():
 0x00000001
 
@@ -158,10 +158,6 @@ Modifiers for method TestClass::stat():
 0x00000011
 
 
-Modifiers for method TestClass::priv():
-0x00000004
-
-
 Modifiers for method TestClass::prot():
 0x00000002