From: Marcus Boerger Date: Wed, 16 Jan 2008 14:19:07 +0000 (+0000) Subject: - Fixed Bug #37964 (Reflection shows private methods of parent class) X-Git-Tag: RELEASE_2_0_0a1~876 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0aaea797da2b94db5c18c0c62ba4fbf687ad50aa;p=php - Fixed Bug #37964 (Reflection shows private methods of parent class) (felipe@php.net) --- diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index bb8d794a9e..eb3dc48310 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -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 index 0000000000..935119314f --- /dev/null +++ b/ext/reflection/tests/bug37964.phpt @@ -0,0 +1,50 @@ +--TEST-- +Reflection Bug #37964 (Reflection shows private methods of parent class) +--FILE-- + +--EXPECTF-- +Class [ class bar extends foo ] { + @@ %s %s + + - Constants [0] { + } + + - Static properties [0] { + } + + - Static methods [0] { + } + + - Properties [0] { + } + + - Methods [2] { + Method [ private method foobar ] { + @@ %s %d - %d + } + + Method [ protected method test3 ] { + @@ %s %d - %d + } + } +}