Merge branch 'PHP-7.1' into PHP-7.2

This commit is contained in:
Andrea Faulds 2017-09-29 21:38:52 +01:00
commit 15efa985df
3 changed files with 38 additions and 3 deletions

2
NEWS
View File

@ -5,6 +5,8 @@ PHP NEWS
- Core - Core
. Fixed bug #75220 (Segfault when calling is_callable on parent). . Fixed bug #75220 (Segfault when calling is_callable on parent).
(andrewnester) (andrewnester)
. Fixed bug #75290 (debug info of Closures of internal functions contain
garbage argument names). (Andrea)
- Date: - Date:
. Fixed bug #75222 (DateInterval microseconds property always 0). (jhdxr) . Fixed bug #75222 (DateInterval microseconds property always 0). (jhdxr)

26
Zend/tests/bug75290.phpt Normal file
View File

@ -0,0 +1,26 @@
--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>"
}
}

View File

@ -500,6 +500,7 @@ static HashTable *zend_closure_get_debug_info(zval *object, int *is_temp) /* {{{
zval val; zval val;
struct _zend_arg_info *arg_info = closure->func.common.arg_info; struct _zend_arg_info *arg_info = closure->func.common.arg_info;
HashTable *debug_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; *is_temp = 1;
@ -532,9 +533,15 @@ static HashTable *zend_closure_get_debug_info(zval *object, int *is_temp) /* {{{
zend_string *name; zend_string *name;
zval info; zval info;
if (arg_info->name) { if (arg_info->name) {
name = zend_strpprintf(0, "%s$%s", if (zstr_args) {
arg_info->pass_by_reference ? "&" : "", name = zend_strpprintf(0, "%s$%s",
ZSTR_VAL(arg_info->name)); 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 { } else {
name = zend_strpprintf(0, "%s$param%d", name = zend_strpprintf(0, "%s$param%d",
arg_info->pass_by_reference ? "&" : "", arg_info->pass_by_reference ? "&" : "",