diff --git a/src/Composer/Util/Filesystem.php b/src/Composer/Util/Filesystem.php index ca395736f..ab64a49a7 100644 --- a/src/Composer/Util/Filesystem.php +++ b/src/Composer/Util/Filesystem.php @@ -316,7 +316,7 @@ class Filesystem $to = lcfirst($this->normalizePath($to)); if ($directories) { - $from .= '/dummy_file'; + $from .= $this->isDirectory($from) ? 'dummy_file' : '/dummy_file'; } if (dirname($from) === dirname($to)) { @@ -460,6 +460,17 @@ class Filesystem { return (bool) preg_match('{^(file://|/|[a-z]:[\\\\/]|\.\.[\\\\/]|[a-z0-9_.-]+[\\\\/])}i', $path); } + + /** + * Return if the given path is a directory + * + * @param string $path + * @return bool + */ + public static function isDirectory($path) + { + return substr($path, -1) === '/'; + } public static function getPlatformPath($path) { diff --git a/tests/Composer/Test/Util/FilesystemTest.php b/tests/Composer/Test/Util/FilesystemTest.php index 8c86c7896..4607512b6 100644 --- a/tests/Composer/Test/Util/FilesystemTest.php +++ b/tests/Composer/Test/Util/FilesystemTest.php @@ -112,6 +112,7 @@ class FilesystemTest extends TestCase array('/foo/bar_vendor', '/foo/bar', '../bar', true), array('/foo/bar_vendor', '/foo/bar/src', '../bar/src', true), array('/foo/bar_vendor/src2', '/foo/bar/src/lib', '../../bar/src/lib', true), + array('C:/', 'C:/foo/bar/', "foo/bar", true), ); }