Quellcode durchsuchen

Add handling for dir, file and class magic constants when loading plugins, fixes #4975

Jordi Boggiano vor 9 Jahren
Ursprung
Commit
49b0bd75b3
1 geänderte Dateien mit 5 neuen und 1 gelöschten Zeilen
  1. 5 1
      src/Composer/Plugin/PluginManager.php

+ 5 - 1
src/Composer/Plugin/PluginManager.php

@@ -169,8 +169,12 @@ class PluginManager
 
         foreach ($classes as $class) {
             if (class_exists($class, false)) {
-                $code = file_get_contents($classLoader->findFile($class));
+                $path = $classLoader->findFile($class);
+                $code = file_get_contents($path);
                 $code = preg_replace('{^((?:final\s+)?(?:\s*))class\s+(\S+)}mi', '$1class $2_composer_tmp'.self::$classCounter, $code);
+                $code = str_replace('__FILE__', "'$path'", $code);
+                $code = str_replace('__DIR__', "'".dirname($path)."'", $code);
+                $code = str_replace('__CLASS__', "'$class'", $code);
                 eval('?>'.$code);
                 $class .= '_composer_tmp'.self::$classCounter;
                 self::$classCounter++;