1
0
mirror of https://github.com/php/php-src.git synced 2026-04-12 18:43:37 +02:00

Check for missing arginfo arguments

Internal functions error when too many arguments are passed. Make
this part of the verification we do in debug builds. This will
help avoid cases where an argument is missing in the stubs,
as recently encountered in 6d96f0f.
This commit is contained in:
Nikita Popov
2020-07-16 20:56:44 +02:00
parent be0d912674
commit 38fb1f8383

View File

@@ -130,7 +130,7 @@ static ZEND_FUNCTION(pass)
ZEND_API const zend_internal_function zend_pass_function = {
ZEND_INTERNAL_FUNCTION, /* type */
{0, 0, 0}, /* arg_flags */
0, /* fn_flags */
ZEND_ACC_VARIADIC, /* fn_flags */
NULL, /* name */
NULL, /* scope */
NULL, /* prototype */
@@ -1122,6 +1122,14 @@ static zend_never_inline ZEND_ATTRIBUTE_UNUSED int zend_verify_internal_arg_type
static zend_always_inline zend_bool zend_internal_call_should_throw(zend_function *fbc, zend_execute_data *call)
{
if (fbc->common.required_num_args > ZEND_CALL_NUM_ARGS(call)) {
/* Required argument not passed. */
return 1;
}
if (fbc->common.num_args < ZEND_CALL_NUM_ARGS(call)
&& !(fbc->common.fn_flags & ZEND_ACC_VARIADIC)) {
/* Too many arguments passed. For internal functions (unlike userland functions),
* this should always throw. */
return 1;
}