com php-src: Remove bogus ctor checks in get_class_methods () + reflection: Zend/zend_builtin_functions. c ext/reflection/php_reflection.c
| From: | Nikita Popov | Date: | Thu, 14 Feb 2019 10:47:31 +0000 |
| Subject: | com php-src: Remove bogus ctor checks in get_class_methods () + reflection: Zend/zend_builtin_functions. c ext/reflection/php_reflection.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-104629@lists.php.net to get a copy of this message | ||
Commit: 1a5cff334d5f93336f3ee645dd73c9297ed24056
Author: Nikita Popov <nikita.ppv@gmail.com> Thu, 14 Feb 2019 11:28:13 +0100
Parents: 43a7d95016761787cace63fb52e93e27e123d0cc
Branches: PHP-7.4 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=1a5cff334d5f93336f3ee645dd73c9297ed24056
Log:
Remove bogus ctor checks in get_class_methods() + reflection
Contrary to the comments, these only hide constructors (old or new
style) if they a) are inherited b) come from a trait and c) are
aliased -- which doesn't make any sense at all.
Changed paths:
M Zend/zend_builtin_functions.c
M ext/reflection/php_reflection.c
Diff:
diff --git a/Zend/zend_builtin_functions..c b/Zend/zend_builtin_functions.c
index 93bbd3b..2b16991 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -1284,26 +1284,16 @@ ZEND_FUNCTION(get_class_methods)
(((mptr->common.fn_flags & ZEND_ACC_PROTECTED) &&
zend_check_protected(mptr->common.scope, scope))
|| ((mptr->common.fn_flags & ZEND_ACC_PRIVATE) &&
- scope == mptr->common.scope)))) {
- size_t len = ZSTR_LEN(mptr->common.function_name);
-
- /* Do not display old-style inherited constructors */
- if (!key) {
+ scope == mptr->common.scope)))
+ ) {
+ if (mptr->type == ZEND_USER_FUNCTION &&
+ (!mptr->op_array.refcount || *mptr->op_array.refcount > 1) &&
+ key && !same_name(key, mptr->common.function_name)) {
+ ZVAL_STR_COPY(&method_name, zend_find_alias_name(mptr->common.scope, key));
+ zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &method_name);
+ } else {
ZVAL_STR_COPY(&method_name, mptr->common.function_name);
zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &method_name);
- } else if ((mptr->common.fn_flags & ZEND_ACC_CTOR) == 0 ||
- mptr->common.scope == ce ||
- zend_binary_strcasecmp(ZSTR_VAL(key), ZSTR_LEN(key),
ZSTR_VAL(mptr->common.function_name), len) == 0) {
-
- if (mptr->type == ZEND_USER_FUNCTION &&
- (!mptr->op_array.refcount || *mptr->op_array.refcount > 1) &&
- !same_name(key, mptr->common.function_name)) {
- ZVAL_STR_COPY(&method_name, zend_find_alias_name(mptr->common.scope, key));
- zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &method_name);
- } else {
- ZVAL_STR_COPY(&method_name, mptr->common.function_name);
- zend_hash_next_index_insert_new(Z_ARRVAL_P(return_value), &method_name);
- }
}
}
} ZEND_HASH_FOREACH_END();
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index 8bfafe7..1773745 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -474,36 +474,26 @@ static void _class_string(smart_str *str, zend_class_entry *ce, zval *obj,
char
count = zend_hash_num_elements(&ce->function_table) - count_static_funcs;
if (count > 0) {
zend_function *mptr;
- zend_string *key;
smart_str method_str = {0};
count = 0;
- ZEND_HASH_FOREACH_STR_KEY_PTR(&ce->function_table, key, mptr) {
+ ZEND_HASH_FOREACH_PTR(&ce->function_table, mptr) {
if ((mptr->common.fn_flags & ZEND_ACC_STATIC) == 0
&& ((mptr->common.fn_flags & ZEND_ACC_PRIVATE) == 0 || mptr->common.scope ==
ce))
{
- size_t len = ZSTR_LEN(mptr->common.function_name);
-
- /* Do not display old-style inherited constructors */
- if ((mptr->common.fn_flags & ZEND_ACC_CTOR) == 0
- || mptr->common.scope == ce
- || !key
- || zend_binary_strcasecmp(ZSTR_VAL(key), ZSTR_LEN(key),
ZSTR_VAL(mptr->common.function_name), len) == 0)
+ zend_function *closure;
+ /* see if this is a closure */
+ if (obj && is_closure_invoke(ce, mptr->common.function_name)
+ && (closure = zend_get_closure_invoke_method(Z_OBJ_P(obj))) != NULL)
{
- zend_function *closure;
- /* see if this is a closure */
- if (obj && is_closure_invoke(ce, mptr->common.function_name)
- && (closure = zend_get_closure_invoke_method(Z_OBJ_P(obj))) != NULL)
- {
- mptr = closure;
- } else {
- closure = NULL;
- }
- smart_str_appendc(&method_str, '\n');
- _function_string(&method_str, mptr, ce, ZSTR_VAL(sub_indent));
- count++;
- _free_function(closure);
+ mptr = closure;
+ } else {
+ closure = NULL;
}
+ smart_str_appendc(&method_str, '\n');
+ _function_string(&method_str, mptr, ce, ZSTR_VAL(sub_indent));
+ count++;
+ _free_function(closure);
}
} ZEND_HASH_FOREACH_END();
smart_str_append_printf(str, "\n%s - Methods [%d] {", indent, count);