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