Browse Source

Merge pull request #5846 from markingman/master

Fixing local file VCS URLs with encoded characters
Jordi Boggiano 8 years ago
parent
commit
de9f333ec6
1 changed files with 14 additions and 2 deletions
  1. 14 2
      src/Composer/Downloader/VcsDownloader.php

+ 14 - 2
src/Composer/Downloader/VcsDownloader.php

@@ -67,13 +67,25 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa
         while ($url = array_shift($urls)) {
             try {
                 if (Filesystem::isLocalPath($url)) {
-                    # realpath() below will not understand
-                    # url that starts with "file://"
+                    // realpath() below will not understand
+                    // url that starts with "file://"
                     $needle = 'file://';
+                    $isFileProtocol = false;
                     if (0 === strpos($url, $needle)) {
                         $url = substr($url, strlen($needle));
+                        $isFileProtocol = true;
                     }
+
+                    // realpath() below will not understand %20 spaces etc.
+                    if (false !== strpos($url, '%')) {
+                        $url = rawurldecode($url);
+                    }
+
                     $url = realpath($url);
+
+                    if ($isFileProtocol) {
+                        $url = $needle . $url;
+                    }
                 }
                 $this->doDownload($package, $path, $url);
                 break;