From 163e8e955269169000fcfd9aa9b0403f8de8823d Mon Sep 17 00:00:00 2001
From: Bruce Weirdan <weirdan@gmail.com>
Date: Wed, 2 Jan 2019 20:54:14 +0200
Subject: [PATCH] Autoloader infinite recursion fix (#1031)

* Autoloader infinite recursion fix

Fixes simplesamlphp/simplesamlphp#1030

* Added test to ensure old autoloader behaviour is preserved

Also fixed undefined variable notice
---
 lib/_autoload_modules.php         |  4 ++--
 tests/lib/AutoloadModulesTest.php | 26 ++++++++++++++++++++++++++
 2 files changed, 28 insertions(+), 2 deletions(-)
 create mode 100644 tests/lib/AutoloadModulesTest.php

diff --git a/lib/_autoload_modules.php b/lib/_autoload_modules.php
index 8484e35b0..db0f5b3f9 100644
--- a/lib/_autoload_modules.php
+++ b/lib/_autoload_modules.php
@@ -22,9 +22,9 @@ function temporaryLoader($class)
     // handle the upgrade to the latest version of XMLSecLibs using namespaces
     if (strstr($class, 'XMLSec') && !strstr($class, '\\RobRichards\\XMLSecLibs\\')) {
         $new = '\\RobRichards\\XMLSecLibs\\'.$class;
-        if (class_exists($new, false)) {
+        if (class_exists($new, true)) {
             class_alias($new, $class);
-            SimpleSAML\Logger::warning("The class or interface '$original' is now using namespaces, please use '$new'.");
+            SimpleSAML\Logger::warning("The class or interface '$class' is now using namespaces, please use '$new'.");
             return;
         }
     }
diff --git a/tests/lib/AutoloadModulesTest.php b/tests/lib/AutoloadModulesTest.php
new file mode 100644
index 000000000..5bc596d23
--- /dev/null
+++ b/tests/lib/AutoloadModulesTest.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace SimpleSAML\Test;
+
+use PHPUnit\Framework\TestCase;
+
+class AutoloadModulesTest extends TestCase
+{
+    /**
+     * @test
+     * @runInSeparateProcess
+     */
+    public function autoloaderDoesNotRecurseInfinitely()
+    {
+        $this->assertFalse(class_exists('NonExisting\\ClassThatHasNothing\\ToDoWithXMLSec\\Library', true));
+    }
+
+    /**
+     * @test
+     * @runInSeparateProcess
+     */
+    public function autoloaderSubstitutesNamespacedXmlSecClassesWhereNonNamespacedClassWasUsed()
+    {
+        $this->assertTrue(class_exists('XMLSecEnc', true));
+    }
+}
-- 
GitLab