diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c index 78315e9880b4..24cd66db445d 100644 --- a/ext/spl/php_spl.c +++ b/ext/spl/php_spl.c @@ -43,16 +43,7 @@ ZEND_TLS HashTable *spl_autoload_functions; static zend_class_entry * spl_find_ce_by_name(zend_string *name, bool autoload) { - zend_class_entry *ce; - - if (!autoload) { - zend_string *lc_name = zend_string_tolower(name); - - ce = zend_hash_find_ptr(EG(class_table), lc_name); - zend_string_release(lc_name); - } else { - ce = zend_lookup_class(name); - } + zend_class_entry *ce = zend_lookup_class_ex(name, NULL, autoload ? 0 : ZEND_FETCH_CLASS_NO_AUTOLOAD); if (ce == NULL) { php_error_docref(NULL, E_WARNING, "Class %s does not exist%s", ZSTR_VAL(name), autoload ? " and could not be loaded" : ""); return NULL; diff --git a/ext/spl/tests/class_parents_leading_backslash.phpt b/ext/spl/tests/class_parents_leading_backslash.phpt new file mode 100644 index 000000000000..be538b79db9d --- /dev/null +++ b/ext/spl/tests/class_parents_leading_backslash.phpt @@ -0,0 +1,72 @@ +--TEST-- +class_parents()/class_implements()/class_uses() accept a leading backslash regardless of $autoload +--FILE-- + +--EXPECT-- +array(1) { + ["ParentC"]=> + string(7) "ParentC" +} +array(1) { + ["ParentC"]=> + string(7) "ParentC" +} +array(1) { + ["Iface"]=> + string(5) "Iface" +} +array(1) { + ["Tr"]=> + string(2) "Tr" +} +array(1) { + ["MyNS\NSParentC"]=> + string(14) "MyNS\NSParentC" +} +array(1) { + ["MyNS\NSParentC"]=> + string(14) "MyNS\NSParentC" +} +array(1) { + ["MyNS\NSIface"]=> + string(12) "MyNS\NSIface" +} +array(1) { + ["MyNS\NSTr"]=> + string(9) "MyNS\NSTr" +}