diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-11-12 11:02:04 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-11-12 11:02:04 +0100 |
commit | d033d5c07a25ab36a9138f35a7a02f62822a9e4d (patch) | |
tree | 3f2187c1e484af5aef759486456bc120b4237fb8 /ext/reflection/php_reflection.c | |
parent | 9acebe14df94cf0be58d1168e04448ac7c4d3e0e (diff) | |
download | php-git-d033d5c07a25ab36a9138f35a7a02f62822a9e4d.tar.gz |
Fix reflection getDefaultValue() with user arg info
The default value is part of the op_array in that case, but we have
no way to access it. Fail gracefully.
Diffstat (limited to 'ext/reflection/php_reflection.c')
-rw-r--r-- | ext/reflection/php_reflection.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 7adcfc506a..2be0ab98db 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -1432,6 +1432,10 @@ static void reflection_class_constant_factory(zend_string *name_str, zend_class_ static int get_parameter_default(zval *result, parameter_reference *param) { if (param->fptr->type == ZEND_INTERNAL_FUNCTION) { + if (param->fptr->common.fn_flags & ZEND_ACC_USER_ARG_INFO) { + /* We don't have a way to determine the default value for this case right now. */ + return FAILURE; + } return zend_get_default_from_internal_arg_info( result, (zend_internal_arg_info *) param->arg_info); } else { @@ -2717,7 +2721,8 @@ ZEND_METHOD(ReflectionParameter, isDefaultValueAvailable) GET_REFLECTION_OBJECT_PTR(param); if (param->fptr->type == ZEND_INTERNAL_FUNCTION) { - RETURN_BOOL(((zend_internal_arg_info*) (param->arg_info))->default_value); + RETURN_BOOL(!(param->fptr->common.fn_flags & ZEND_ACC_USER_ARG_INFO) + && ((zend_internal_arg_info*) (param->arg_info))->default_value); } else { zval *default_value = get_default_from_recv((zend_op_array *)param->fptr, param->offset); RETURN_BOOL(default_value != NULL); |