Browse Source

scope isolation for user includes

Nicolas Grekas 11 years ago
parent
commit
6d7b9afc4b

+ 1 - 1
src/Composer/Autoload/AutoloadGenerator.php

@@ -533,7 +533,7 @@ REGISTER_LOADER;
             $file .= <<<'INCLUDE_FILES'
         $includeFiles = require __DIR__ . '/autoload_files.php';
         foreach ($includeFiles as $file) {
-            require $file;
+            \Composer\Autoload\includeFile($file);
         }
 
 

+ 11 - 1
src/Composer/Autoload/ClassLoader.php

@@ -266,7 +266,7 @@ class ClassLoader
     public function loadClass($class)
     {
         if ($file = $this->findFile($class)) {
-            include $file;
+            includeFile($file);
 
             return true;
         }
@@ -352,3 +352,13 @@ class ClassLoader
         return $this->classMap[$class] = false;
     }
 }
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile()
+{
+    include func_get_arg(0);
+}

+ 1 - 1
tests/Composer/Test/Autoload/Fixtures/autoload_real_files_by_dependency.php

@@ -45,7 +45,7 @@ class ComposerAutoloaderInitFilesAutoloadOrder
 
         $includeFiles = require __DIR__ . '/autoload_files.php';
         foreach ($includeFiles as $file) {
-            require $file;
+            \Composer\Autoload\includeFile($file);
         }
 
         return $loader;

+ 1 - 1
tests/Composer/Test/Autoload/Fixtures/autoload_real_functions.php

@@ -45,7 +45,7 @@ class ComposerAutoloaderInitFilesAutoload
 
         $includeFiles = require __DIR__ . '/autoload_files.php';
         foreach ($includeFiles as $file) {
-            require $file;
+            \Composer\Autoload\includeFile($file);
         }
 
         return $loader;

+ 1 - 1
tests/Composer/Test/Autoload/Fixtures/autoload_real_target_dir.php

@@ -47,7 +47,7 @@ class ComposerAutoloaderInitTargetDir
 
         $includeFiles = require __DIR__ . '/autoload_files.php';
         foreach ($includeFiles as $file) {
-            require $file;
+            \Composer\Autoload\includeFile($file);
         }
 
         return $loader;