Skip to content

Commit f75ae84

Browse files
authored
Preserve class-name case in ReflectionClass::getProperty() (#22272)
When given a "Class::property" argument, getProperty() lowercased the class part before looking it up, so the "Class ... does not exist" exception printed the lowercased name and autoloaders received it in lowercase, breaking case-sensitive (PSR-4) autoloaders. Pass the class name to zend_lookup_class() as given - it lowercases internally for the class-table lookup - matching what ReflectionMethod and ReflectionProperty already do.
1 parent 9e9b309 commit f75ae84

5 files changed

Lines changed: 9 additions & 7 deletions

File tree

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ PHP NEWS
4949
Phar::addEmptyDir() for paths starting with "/.phar", while allowing
5050
non-magic directory names that merely share the ".phar" prefix. (Weilin Du)
5151

52+
- Reflection:
53+
. Preserve class-name case in ReflectionClass::getProperty() error messages
54+
and autoloading. (jorgsowa)
55+
5256
- Sqlite:
5357
. Fix error checks for column retrieval. (ndossche)
5458

ext/reflection/php_reflection.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4734,9 +4734,7 @@ ZEND_METHOD(ReflectionClass, getProperty)
47344734
str_name = ZSTR_VAL(name);
47354735
if ((tmp = strstr(ZSTR_VAL(name), "::")) != NULL) {
47364736
classname_len = tmp - ZSTR_VAL(name);
4737-
classname = zend_string_alloc(classname_len, 0);
4738-
zend_str_tolower_copy(ZSTR_VAL(classname), ZSTR_VAL(name), classname_len);
4739-
ZSTR_VAL(classname)[classname_len] = '\0';
4737+
classname = zend_string_init(ZSTR_VAL(name), classname_len, 0);
47404738
str_name_len = ZSTR_LEN(name) - (classname_len + 2);
47414739
str_name = tmp + 2;
47424740

ext/reflection/tests/ReflectionClass_getProperty_003.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,4 +244,4 @@ Fully qualified property name X::$privC does not specify a base class of C
244244
--- (Reflecting on X::doesNotExist) ---
245245
Fully qualified property name X::$doesNotExist does not specify a base class of C
246246
--- (Reflecting on doesNotexist::doesNotExist) ---
247-
Class "doesnotexist" does not exist
247+
Class "doesNotexist" does not exist

ext/reflection/tests/ReflectionClass_getProperty_004.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,4 +248,4 @@ Fully qualified property name X::$privC does not specify a base class of C
248248
--- (Reflecting on X::doesNotExist) ---
249249
Fully qualified property name X::$doesNotExist does not specify a base class of C
250250
--- (Reflecting on doesNotexist::doesNotExist) ---
251-
Class "doesnotexist" does not exist
251+
Class "doesNotexist" does not exist

tests/classes/autoload_016.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ $rc->getProperty("UndefC::p");
1616
}
1717
?>
1818
--EXPECT--
19-
In autoload: string(6) "undefc"
20-
Class "undefc" does not exist
19+
In autoload: string(6) "UndefC"
20+
Class "UndefC" does not exist

0 commit comments

Comments
 (0)