From c66639fe0371ce54dc955d584fdb1f5ba8ab9212 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Fri, 29 Apr 2016 15:40:12 +0100 Subject: [PATCH] Fix content-length check to look at the last header received, fixes #5268 --- src/Composer/Util/RemoteFilesystem.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Composer/Util/RemoteFilesystem.php b/src/Composer/Util/RemoteFilesystem.php index bbdcc3851..61b30fec3 100644 --- a/src/Composer/Util/RemoteFilesystem.php +++ b/src/Composer/Util/RemoteFilesystem.php @@ -277,7 +277,8 @@ class RemoteFilesystem try { $result = file_get_contents($fileUrl, false, $ctx); - if ($this->bytesMax && Platform::strlen($result) < $this->bytesMax) { + $contentLength = !empty($http_response_header[0]) ? $this->findHeaderValue($http_response_header, 'content-length') : null; + if ($contentLength && Platform::strlen($result) < $contentLength) { // alas, this is not possible via the stream callback because STREAM_NOTIFY_COMPLETED is documented, but not implemented anywhere in PHP throw new TransportException('Content-Length mismatch'); } @@ -525,14 +526,12 @@ class RemoteFilesystem break; case STREAM_NOTIFY_FILE_SIZE_IS: - if ($this->bytesMax < $bytesMax) { - $this->bytesMax = $bytesMax; - } + $this->bytesMax = $bytesMax; break; case STREAM_NOTIFY_PROGRESS: if ($this->bytesMax > 0 && $this->progress) { - $progression = round($bytesTransferred / $this->bytesMax * 100); + $progression = min(100, round($bytesTransferred / $this->bytesMax * 100)); if ((0 === $progression % 5) && 100 !== $progression && $progression !== $this->lastProgress) { $this->lastProgress = $progression;