diff --git a/libraries/loader.php b/libraries/loader.php index 0ada1898cd18e..5adca189bf340 100644 --- a/libraries/loader.php +++ b/libraries/loader.php @@ -297,9 +297,9 @@ class_alias($original, $class); public static function register($class, $path, $force = true) { // When an alias exists, register it as well - if (key_exists($class, self::$classAliases)) + if (key_exists(strtolower($class), self::$classAliases)) { - self::register(self::stripFirstBackslash(self::$classAliases[$class]), $path, $force); + self::register(self::stripFirstBackslash(self::$classAliases[strtolower($class)]), $path, $force); } // Sanitize class name. @@ -377,6 +377,9 @@ public static function registerPrefix($prefix, $path, $reset = false, $prepend = */ public static function registerAlias($alias, $original, $version = false) { + // PHP is case insensitive so support all kind of alias combination + $alias = strtolower($alias); + if (!isset(self::$classAliases[$alias])) { self::$classAliases[$alias] = $original; @@ -631,7 +634,7 @@ public static function loadByPsr0($class) */ public static function loadByAlias($class) { - $class = self::stripFirstBackslash($class); + $class = strtolower(self::stripFirstBackslash($class)); if (isset(self::$classAliases[$class])) { diff --git a/tests/unit/suites/libraries/joomla/JLoaderTest.php b/tests/unit/suites/libraries/joomla/JLoaderTest.php index 0e814941ff90e..886c62008a43e 100644 --- a/tests/unit/suites/libraries/joomla/JLoaderTest.php +++ b/tests/unit/suites/libraries/joomla/JLoaderTest.php @@ -301,6 +301,24 @@ public function testAliasInstanceOf() ); } + /** + * Tests the JLoader::registerAlias method if the alias works ignoring cases + * + * @return void + * + * @since 3.8.0 + */ + public function testAliasIgnoreCase() + { + // Normally register the class + JLoader::register('JLoaderAliasStub', JPATH_TEST_STUBS . '/loaderoveralias/jloaderaliasstub.php'); + + // Register the alias + JLoader::registerAlias('CASEinsensitiveALIAS', 'JLoaderAliasStub'); + + $this->assertTrue(class_exists('caseINSENSITIVEalias')); + } + /** * Tests the JLoader::load method. *