From ec933398c4b71ad18e3218d7b4a29e8182c1edf1 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Sun, 24 Apr 2016 14:21:29 +0100 Subject: [PATCH] Fix classname replacement in plugin updates, fixes #5237 --- src/Composer/Plugin/PluginManager.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Composer/Plugin/PluginManager.php b/src/Composer/Plugin/PluginManager.php index d77337809..6f6d946b4 100644 --- a/src/Composer/Plugin/PluginManager.php +++ b/src/Composer/Plugin/PluginManager.php @@ -179,9 +179,14 @@ class PluginManager foreach ($classes as $class) { if (class_exists($class, false)) { + $class = trim($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); + $separatorPos = strrpos($class, '\\'); + if ($separatorPos) { + $className = substr($class, $separatorPos + 1); + } + $code = preg_replace('{^((?:final\s+)?(?:\s*))class\s+(\S+)}mi', '$1class $2_composer_tmp'.self::$classCounter, $code, 1); $code = str_replace('__FILE__', var_export($path, true), $code); $code = str_replace('__DIR__', var_export(dirname($path), true), $code); $code = str_replace('__CLASS__', var_export($class, true), $code);