From dcfa78cf8c23e5ace015fd0ce73036ceff3cc3e7 Mon Sep 17 00:00:00 2001
From: Helmut Hummel <helmut.hummel@typo3.org>
Date: Sun, 1 Mar 2015 15:22:48 +0100
Subject: [PATCH] [BUGFIX] Respect interfaces as well when checking class
 existence

As a backwards compatibility measure, the composer class loader
checked for class existence before requiring a class file, which
could only happen if wrong class name casing was used before.

We now enable this also for interfaces.

Releases: master, 6.2
Resolves: #65434
Change-Id: I6dc1dc6cbf8cb7018ceeff1eb881c80658c11e33
Reviewed-on: http://review.typo3.org/37412
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
---
 .../Classes/Composer/ClassAliasLoader.php       | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/typo3/contrib/vendor/helhum/class-alias-loader/Classes/Composer/ClassAliasLoader.php b/typo3/contrib/vendor/helhum/class-alias-loader/Classes/Composer/ClassAliasLoader.php
index 5def4465113a..7822cf140461 100644
--- a/typo3/contrib/vendor/helhum/class-alias-loader/Classes/Composer/ClassAliasLoader.php
+++ b/typo3/contrib/vendor/helhum/class-alias-loader/Classes/Composer/ClassAliasLoader.php
@@ -100,10 +100,7 @@ class ClassAliasLoader {
 	 */
 	public function loadClass($className) {
 		if (!$this->caseSensitiveClassLoading) {
-			$lowerCasedClassName = strtolower($className);
-			if ($this->composerClassLoader->findFile($lowerCasedClassName)) {
-				return $this->composerClassLoader->loadClass($lowerCasedClassName);
-			}
+			$className = strtolower($className);
 		}
 		return $this->composerClassLoader->loadClass($className);
 	}
@@ -117,9 +114,9 @@ class ClassAliasLoader {
 	 * @return bool
 	 */
 	protected function loadOriginalClassAndSetAliases($originalClassName) {
-		if (class_exists($originalClassName, false) || $this->loadClass($originalClassName)) {
+		if ($this->classOrInterfaceExists($originalClassName) || $this->loadClass($originalClassName)) {
 			foreach ($this->aliasMap['classNameToAliasMapping'][$originalClassName] as $aliasClassName) {
-				if (!class_exists($aliasClassName, false)) {
+				if (!$this->classOrInterfaceExists($aliasClassName)) {
 					class_alias($originalClassName, $aliasClassName);
 				}
 			}
@@ -128,6 +125,14 @@ class ClassAliasLoader {
 		return false;
 	}
 
+	/**
+	 * @param string $className
+	 * @return bool
+	 */
+	protected function classOrInterfaceExists($className) {
+		return class_exists($className, false) || interface_exists($className, false);
+	}
+
 	/**
 	 * Act as a proxy for method calls to composer class loader
 	 *
-- 
GitLab