Просмотр исходного кода

Make sure the directory is empty even if weird inputs are given, fixes #1683

Jordi Boggiano 12 лет назад
Родитель
Сommit
57fe33d0f3
1 измененных файлов с 4 добавлено и 7 удалено
  1. 4 7
      src/Composer/Installer/ProjectInstaller.php

+ 4 - 7
src/Composer/Installer/ProjectInstaller.php

@@ -29,7 +29,7 @@ class ProjectInstaller implements InstallerInterface
 
     public function __construct($installPath, DownloadManager $dm)
     {
-        $this->installPath = $installPath;
+        $this->installPath = rtrim(strtr($installPath, '\\', '/'), '/').'/';
         $this->downloadManager = $dm;
     }
 
@@ -58,14 +58,11 @@ class ProjectInstaller implements InstallerInterface
     public function install(InstalledRepositoryInterface $repo, PackageInterface $package)
     {
         $installPath = $this->installPath;
-        if (file_exists($installPath) && (count(glob($installPath.'/*')) || count(glob($installPath.'/.*')) > 2)) {
-            throw new \InvalidArgumentException("Project directory $installPath already exists.");
-        }
-        if (!file_exists(dirname($installPath))) {
-            throw new \InvalidArgumentException("Project root " . dirname($installPath) . " does not exist.");
+        if (file_exists($installPath) && (count(glob($installPath.'*')) || (count(glob($installPath.'.*')) > 2))) {
+            throw new \InvalidArgumentException("Project directory $installPath is not empty.");
         }
         if (!is_dir($installPath)) {
-            mkdir($installPath, 0777);
+            mkdir($installPath, 0777, true);
         }
         $this->downloadManager->download($package, $installPath);
     }