diff --git a/src/Composer/Cache.php b/src/Composer/Cache.php index a6044b630..4b1648841 100644 --- a/src/Composer/Cache.php +++ b/src/Composer/Cache.php @@ -44,6 +44,11 @@ class Cache $this->whitelist = $whitelist; $this->filesystem = $filesystem ?: new Filesystem(); + if (preg_match('{(^|[\\\\/])(\$null|NUL|/dev/null)([\\\\/]|$)}', $cacheDir)) { + $this->enabled = false; + return; + } + if ( (!is_dir($this->root) && !Silencer::call('mkdir', $this->root, 0777, true)) || !is_writable($this->root) diff --git a/src/Composer/Repository/ComposerRepository.php b/src/Composer/Repository/ComposerRepository.php index ce2caa968..78ef7430e 100644 --- a/src/Composer/Repository/ComposerRepository.php +++ b/src/Composer/Repository/ComposerRepository.php @@ -645,6 +645,13 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito $json = $rfs->getContents($hostname, $filename, false); if ($sha256 && $sha256 !== hash('sha256', $json)) { + // undo downgrade before trying again if http seems to be hijacked or modifying content somehow + if ($this->allowSslDowngrade) { + $this->url = str_replace('http://', 'https://', $this->url); + $this->baseUrl = str_replace('http://', 'https://', $this->baseUrl); + $filename = str_replace('http://', 'https://', $filename); + } + if ($retries) { usleep(100000);