diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c index 78315e9880b4..42fbeba71dbe 100644 --- a/ext/spl/php_spl.c +++ b/ext/spl/php_spl.c @@ -310,7 +310,12 @@ PHP_FUNCTION(spl_autoload) pos_len = (int)ZSTR_LEN(file_exts); } - lc_name = zend_string_tolower(class_name); + if (ZSTR_VAL(class_name)[0] == '\\') { + lc_name = zend_string_alloc(ZSTR_LEN(class_name) - 1, 0); + zend_str_tolower_copy(ZSTR_VAL(lc_name), ZSTR_VAL(class_name) + 1, ZSTR_LEN(class_name) - 1); + } else { + lc_name = zend_string_tolower(class_name); + } while (pos && *pos && !EG(exception)) { pos1 = strchr(pos, ','); if (pos1) { diff --git a/ext/spl/tests/spl_autoload_leading_backslash.phpt b/ext/spl/tests/spl_autoload_leading_backslash.phpt new file mode 100644 index 000000000000..ff8ae3234eee --- /dev/null +++ b/ext/spl/tests/spl_autoload_leading_backslash.phpt @@ -0,0 +1,18 @@ +--TEST-- +spl_autoload(): a leading "\" in the class name is ignored +--FILE-- + +--EXPECT-- +bool(true) +bool(true)