Skip to content

Commit 5f11f42

Browse files
committed
Merge branch 'PHP-8.5'
* PHP-8.5: Ignore leading namespace separator in ReflectionParameter::__construct()
2 parents 6993b7d + 6e11afc commit 5f11f42

2 files changed

Lines changed: 31 additions & 3 deletions

File tree

ext/reflection/php_reflection.c

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2477,9 +2477,20 @@ ZEND_METHOD(ReflectionParameter, __construct)
24772477
switch (Z_TYPE_P(reference)) {
24782478
case IS_STRING:
24792479
{
2480-
zend_string *lcname = zend_string_tolower(Z_STR_P(reference));
2481-
fptr = zend_hash_find_ptr(EG(function_table), lcname);
2482-
zend_string_release(lcname);
2480+
zend_string *fname = Z_STR_P(reference);
2481+
zend_string *lcname;
2482+
if (UNEXPECTED(ZSTR_VAL(fname)[0] == '\\')) {
2483+
/* Ignore leading "\" */
2484+
ALLOCA_FLAG(use_heap)
2485+
ZSTR_ALLOCA_ALLOC(lcname, ZSTR_LEN(fname) - 1, use_heap);
2486+
zend_str_tolower_copy(ZSTR_VAL(lcname), ZSTR_VAL(fname) + 1, ZSTR_LEN(fname) - 1);
2487+
fptr = zend_fetch_function(lcname);
2488+
ZSTR_ALLOCA_FREE(lcname, use_heap);
2489+
} else {
2490+
lcname = zend_string_tolower(fname);
2491+
fptr = zend_fetch_function(lcname);
2492+
zend_string_release(lcname);
2493+
}
24832494
if (!fptr) {
24842495
zend_throw_exception_ex(reflection_exception_ptr, 0,
24852496
"Function %s() does not exist", Z_STRVAL_P(reference));
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
ReflectionParameter::__construct(): a leading "\" in the function name is ignored
3+
--FILE--
4+
<?php
5+
6+
function demo(string $arg) {}
7+
8+
$p = new ReflectionParameter("\\demo", 0);
9+
var_dump($p->getName());
10+
11+
$p = new ReflectionParameter("demo", 0);
12+
var_dump($p->getName());
13+
14+
?>
15+
--EXPECT--
16+
string(3) "arg"
17+
string(3) "arg"

0 commit comments

Comments
 (0)