request). (Nikita)
. Fixed bug #75220 (Segfault when calling is_callable on parent).
(andrewnester)
+ . Fixed bug #75290 (debug info of Closures of internal functions contain
+ garbage argument names). (Andrea)
- litespeed:
. Fixed bug #75248 (Binary directory doesn't get created when building
--- /dev/null
+--TEST--
+Bug #75290 (debug info of Closures of internal functions contain garbage argument names)
+--FILE--
+<?php
+
+var_dump((new ReflectionFunction('sin'))->getClosure());
+
+var_dump(function ($someThing) {});
+
+?>
+--EXPECT--
+object(Closure)#2 (1) {
+ ["parameter"]=>
+ array(1) {
+ ["$number"]=>
+ string(10) "<required>"
+ }
+}
+object(Closure)#2 (1) {
+ ["parameter"]=>
+ array(1) {
+ ["$someThing"]=>
+ string(10) "<required>"
+ }
+}
+
zval val;
struct _zend_arg_info *arg_info = closure->func.common.arg_info;
HashTable *debug_info;
+ zend_bool zstr_args = (closure->func.type == ZEND_USER_FUNCTION) || (closure->func.common.fn_flags & ZEND_ACC_USER_ARG_INFO);
*is_temp = 1;
zend_string *name;
zval info;
if (arg_info->name) {
- name = zend_strpprintf(0, "%s$%s",
- arg_info->pass_by_reference ? "&" : "",
- ZSTR_VAL(arg_info->name));
+ if (zstr_args) {
+ name = zend_strpprintf(0, "%s$%s",
+ arg_info->pass_by_reference ? "&" : "",
+ ZSTR_VAL(arg_info->name));
+ } else {
+ name = zend_strpprintf(0, "%s$%s",
+ arg_info->pass_by_reference ? "&" : "",
+ ((zend_internal_arg_info*)arg_info)->name);
+ }
} else {
name = zend_strpprintf(0, "%s$param%d",
arg_info->pass_by_reference ? "&" : "",