mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Merge branch 'PHP-7.4'
This commit is contained in:
commit
92291ab726
@ -2792,6 +2792,16 @@ static int zend_is_callable_check_class(zend_string *name, zend_class_entry *sco
|
|||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
static void free_fcc(zend_fcall_info_cache *fcc) {
|
||||||
|
if (fcc->function_handler &&
|
||||||
|
(fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
|
||||||
|
if (fcc->function_handler->common.function_name) {
|
||||||
|
zend_string_release_ex(fcc->function_handler->common.function_name, 0);
|
||||||
|
}
|
||||||
|
zend_free_trampoline(fcc->function_handler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static zend_always_inline int zend_is_callable_check_func(int check_flags, zval *callable, zend_fcall_info_cache *fcc, int strict_class, char **error) /* {{{ */
|
static zend_always_inline int zend_is_callable_check_func(int check_flags, zval *callable, zend_fcall_info_cache *fcc, int strict_class, char **error) /* {{{ */
|
||||||
{
|
{
|
||||||
zend_class_entry *ce_org = fcc->calling_scope;
|
zend_class_entry *ce_org = fcc->calling_scope;
|
||||||
@ -3131,13 +3141,8 @@ again:
|
|||||||
|
|
||||||
check_func:
|
check_func:
|
||||||
ret = zend_is_callable_check_func(check_flags, callable, fcc, strict_class, error);
|
ret = zend_is_callable_check_func(check_flags, callable, fcc, strict_class, error);
|
||||||
if (fcc == &fcc_local &&
|
if (fcc == &fcc_local) {
|
||||||
fcc->function_handler &&
|
free_fcc(fcc);
|
||||||
(fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
|
|
||||||
if (fcc->function_handler->common.function_name) {
|
|
||||||
zend_string_release_ex(fcc->function_handler->common.function_name, 0);
|
|
||||||
}
|
|
||||||
zend_free_trampoline(fcc->function_handler);
|
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -3205,6 +3210,9 @@ check_func:
|
|||||||
case IS_OBJECT:
|
case IS_OBJECT:
|
||||||
if (Z_OBJ_HANDLER_P(callable, get_closure) && Z_OBJ_HANDLER_P(callable, get_closure)(Z_OBJ_P(callable), &fcc->calling_scope, &fcc->function_handler, &fcc->object) == SUCCESS) {
|
if (Z_OBJ_HANDLER_P(callable, get_closure) && Z_OBJ_HANDLER_P(callable, get_closure)(Z_OBJ_P(callable), &fcc->calling_scope, &fcc->function_handler, &fcc->object) == SUCCESS) {
|
||||||
fcc->called_scope = fcc->calling_scope;
|
fcc->called_scope = fcc->calling_scope;
|
||||||
|
if (fcc == &fcc_local) {
|
||||||
|
free_fcc(fcc);
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (error) *error = estrdup("no array or string given");
|
if (error) *error = estrdup("no array or string given");
|
||||||
@ -3245,11 +3253,7 @@ ZEND_API zend_bool zend_make_callable(zval *callable, zend_string **callable_nam
|
|||||||
add_next_index_str(callable, zend_string_copy(fcc.calling_scope->name));
|
add_next_index_str(callable, zend_string_copy(fcc.calling_scope->name));
|
||||||
add_next_index_str(callable, zend_string_copy(fcc.function_handler->common.function_name));
|
add_next_index_str(callable, zend_string_copy(fcc.function_handler->common.function_name));
|
||||||
}
|
}
|
||||||
if (fcc.function_handler &&
|
free_fcc(&fcc);
|
||||||
(fcc.function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
|
|
||||||
zend_string_release_ex(fcc.function_handler->common.function_name, 0);
|
|
||||||
zend_free_trampoline(fcc.function_handler);
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user