]> granicus.if.org Git - php/commitdiff
- Fixed Bug #37964 (Reflection shows private methods of parent class)
authorMarcus Boerger <helly@php.net>
Wed, 16 Jan 2008 14:19:07 +0000 (14:19 +0000)
committerMarcus Boerger <helly@php.net>
Wed, 16 Jan 2008 14:19:07 +0000 (14:19 +0000)
  (felipe@php.net)

ext/reflection/php_reflection.c
ext/reflection/tests/bug37964.phpt [new file with mode: 0644]

index bb8d794a9ef6cc381114c008fc54412dffae83a1..eb3dc483101df09796f854901f22617d0333dda0 100644 (file)
@@ -519,7 +519,8 @@ static void _class_string(string *str, zend_class_entry *ce, zval *obj, char *in
                        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_STATIC)) {
+                               if ((mptr->common.fn_flags & ZEND_ACC_STATIC) == 0 &&
+                                       ((mptr->common.fn_flags & ZEND_ACC_PRIVATE) == 0 || mptr->common.scope == ce)) {
                                        zstr key;
                                        uint key_len;
                                        ulong num_index;
@@ -541,6 +542,9 @@ static void _class_string(string *str, zend_class_entry *ce, zval *obj, char *in
                                zend_hash_move_forward_ex(&ce->function_table, &pos);
                        }
                        string_printf(str, "\n%s  - Methods [%d] {", indent, count);
+                       if (!count) {
+                               string_printf(str, "\n");
+                       }
                        string_append(str, &dyn);
                        string_free(&dyn);
                } else {
diff --git a/ext/reflection/tests/bug37964.phpt b/ext/reflection/tests/bug37964.phpt
new file mode 100644 (file)
index 0000000..9351193
--- /dev/null
@@ -0,0 +1,50 @@
+--TEST--
+Reflection Bug #37964 (Reflection shows private methods of parent class)
+--FILE--
+<?php
+
+abstract class foobar {
+       private function test2() {
+       }       
+}
+class foo extends foobar {
+       private $foo = 1;
+       private function test() {
+       }
+       protected function test3() {
+       }
+}
+class bar extends foo {
+       private function foobar() {
+       }
+}
+
+Reflection::export(new ReflectionClass(new bar));
+
+?>
+--EXPECTF--
+Class [ <user> class bar extends foo ] {
+  @@ %s %s
+
+  - Constants [0] {
+  }
+
+  - Static properties [0] {
+  }
+
+  - Static methods [0] {
+  }
+
+  - Properties [0] {
+  }
+
+  - Methods [2] {
+    Method [ <user> private method foobar ] {
+      @@ %s %d - %d
+    }
+
+    Method [ <user, inherits foo> protected method test3 ] {
+      @@ %s %d - %d
+    }
+  }
+}