From: Nikita Popov Date: Tue, 7 Apr 2020 14:05:33 +0000 (+0200) Subject: Assert that arginfo parameter name is present X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c81cf1c7af886161628ac4360cb5e5bfd94500fd;p=php Assert that arginfo parameter name is present --- diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 68bee582c1..47730ff3ed 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -2167,9 +2167,10 @@ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_functio if (reg_function->common.arg_info && reg_function->common.num_args) { uint32_t i; for (i = 0; i < reg_function->common.num_args; i++) { - if (ZEND_TYPE_IS_SET(reg_function->common.arg_info[i].type)) { + zend_arg_info *arg_info = ®_function->common.arg_info[i]; + ZEND_ASSERT(arg_info->name && "Parameter must have a name"); + if (ZEND_TYPE_IS_SET(arg_info->type)) { reg_function->common.fn_flags |= ZEND_ACC_HAS_TYPE_HINTS; - break; } } } diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index ad02380e35..10e8552b69 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -670,16 +670,10 @@ static ZEND_COLD zend_string *zend_get_function_declaration(const zend_function } smart_str_appendc(&str, '$'); - - if (arg_info->name) { - if (fptr->type == ZEND_INTERNAL_FUNCTION) { - smart_str_appends(&str, ((zend_internal_arg_info*)arg_info)->name); - } else { - smart_str_appendl(&str, ZSTR_VAL(arg_info->name), ZSTR_LEN(arg_info->name)); - } + if (fptr->type == ZEND_INTERNAL_FUNCTION) { + smart_str_appends(&str, ((zend_internal_arg_info*)arg_info)->name); } else { - smart_str_appends(&str, "param"); - smart_str_append_unsigned(&str, i); + smart_str_appendl(&str, ZSTR_VAL(arg_info->name), ZSTR_LEN(arg_info->name)); } if (i >= required && !ZEND_ARG_IS_VARIADIC(arg_info)) { diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 278e565874..e9993e9feb 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -638,15 +638,12 @@ static void _parameter_string(smart_str *str, zend_function *fptr, struct _zend_ if (ZEND_ARG_IS_VARIADIC(arg_info)) { smart_str_appends(str, "..."); } - if (arg_info->name) { - smart_str_append_printf(str, "$%s", - (fptr->type == ZEND_INTERNAL_FUNCTION && - !(fptr->common.fn_flags & ZEND_ACC_USER_ARG_INFO)) ? - ((zend_internal_arg_info*)arg_info)->name : - ZSTR_VAL(arg_info->name)); - } else { - smart_str_append_printf(str, "$param%d", offset); - } + smart_str_append_printf(str, "$%s", + (fptr->type == ZEND_INTERNAL_FUNCTION && + !(fptr->common.fn_flags & ZEND_ACC_USER_ARG_INFO)) ? + ((zend_internal_arg_info*)arg_info)->name : + ZSTR_VAL(arg_info->name)); + if (fptr->type == ZEND_USER_FUNCTION && !required) { zend_op *precv = _get_recv_op((zend_op_array*)fptr, offset); if (precv && precv->opcode == ZEND_RECV_INIT && precv->op2_type != IS_UNUSED) {