소스 검색

Fix the ZipDownloader to catch the exceptions thrown in Symfony process.
The problem was introduced in 72d4bea8 and causes composer to not fallback
to ZipArchive when unzip can not be executed (i.e. when proc_open() is
not allowed).

Christian Schiffler 10 년 전
부모
커밋
7cec839d30
1개의 변경된 파일10개의 추가작업 그리고 4개의 파일을 삭제
  1. 10 4
      src/Composer/Downloader/ZipDownloader.php

+ 10 - 4
src/Composer/Downloader/ZipDownloader.php

@@ -39,11 +39,17 @@ class ZipDownloader extends ArchiveDownloader
         // try to use unzip on *nix
         if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
             $command = 'unzip '.escapeshellarg($file).' -d '.escapeshellarg($path) . ' && chmod -R u+w ' . escapeshellarg($path);
-            if (0 === $this->process->execute($command, $ignoredOutput)) {
-                return;
-            }
+            try {
+                if (0 === $this->process->execute($command, $ignoredOutput)) {
+                    return;
+                }
 
-            $processError = 'Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput();
+                $processError = 'Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput();
+            }
+            catch(\Exception $e)
+            {
+                $processError = $e->getMessage();
+            }
         }
 
         if (!class_exists('ZipArchive')) {