From: Nikita Popov Date: Mon, 31 Aug 2020 12:02:35 +0000 (+0200) Subject: Fix fetching default value of internal function with userland arginfo X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b4196ae9dfb345f0fd52084d5574d60c49139dc7;p=php Fix fetching default value of internal function with userland arginfo "Fix" in the sense of "not crash". We aren't able to actually display the default value for this case, as there's no way to fetch the relevant information right now. --- diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index a24d72c747..016851e9e5 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -667,7 +667,10 @@ static void _parameter_string(smart_str *str, zend_function *fptr, struct _zend_ if (!required) { if (fptr->type == ZEND_INTERNAL_FUNCTION) { smart_str_appends(str, " = "); - if (((zend_internal_arg_info*)arg_info)->default_value) { + /* TODO: We don't have a way to fetch the default value for an internal function + * with userland arg info. */ + if (has_internal_arg_info(fptr) + && ((zend_internal_arg_info*)arg_info)->default_value) { smart_str_appends(str, ((zend_internal_arg_info*)arg_info)->default_value); } else { smart_str_appends(str, ""); diff --git a/ext/reflection/tests/default_value_internal_userland_arginfo.phpt b/ext/reflection/tests/default_value_internal_userland_arginfo.phpt new file mode 100644 index 0000000000..d2b0589cd1 --- /dev/null +++ b/ext/reflection/tests/default_value_internal_userland_arginfo.phpt @@ -0,0 +1,16 @@ +--TEST-- +Fetching default value of an internal trampoline function with userland arginfo +--FILE-- +getMethod('__invoke'); +echo $rm, "\n"; +?> +--EXPECT-- +Method [ public method __invoke ] { + + - Parameters [1] { + Parameter #0 [ $b = ] + } +}