From 49b0bd75b304819996057c5a0e64bbfd2a25b9b0 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Mon, 29 Feb 2016 13:49:36 +0000 Subject: [PATCH] Add handling for dir, file and class magic constants when loading plugins, fixes #4975 --- src/Composer/Plugin/PluginManager.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Composer/Plugin/PluginManager.php b/src/Composer/Plugin/PluginManager.php index d83b78ac2..a0e199f06 100644 --- a/src/Composer/Plugin/PluginManager.php +++ b/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++;