diff --git a/Core/src/Upload/MultipartUploader.php b/Core/src/Upload/MultipartUploader.php index 2b0b52e717bb..06522f2e7075 100644 --- a/Core/src/Upload/MultipartUploader.php +++ b/Core/src/Upload/MultipartUploader.php @@ -95,7 +95,7 @@ private function prepareRequest() $size = $multipartStream->getSize(); if ($size !== null) { - $headers['Content-Length'] = $size; + $headers['Content-Length'] = (string) $size; } $customHeaders = $this->requestOptions['restOptions']['headers'] ?? []; diff --git a/Core/src/Upload/ResumableUploader.php b/Core/src/Upload/ResumableUploader.php index 1fb9c810a8cb..f970dde52c7e 100644 --- a/Core/src/Upload/ResumableUploader.php +++ b/Core/src/Upload/ResumableUploader.php @@ -165,7 +165,7 @@ public function upload() $rangeEnd = $rangeStart + ($currStreamLimitSize - 1); $headers = $this->headers + [ - 'Content-Length' => $currStreamLimitSize, + 'Content-Length' => (string) $currStreamLimitSize, 'Content-Type' => $this->contentType, 'Content-Range' => "bytes $rangeStart-$rangeEnd/$size", ]; @@ -245,7 +245,7 @@ protected function createResumeUri() { $headers = $this->headers + [ 'X-Upload-Content-Type' => $this->contentType, - 'X-Upload-Content-Length' => $this->data->getSize(), + 'X-Upload-Content-Length' => (string) $this->data->getSize(), 'Content-Type' => 'application/json' ]; diff --git a/Core/src/Upload/SignedUrlUploader.php b/Core/src/Upload/SignedUrlUploader.php index 4a7d8aa77bbd..8408a855f3c3 100644 --- a/Core/src/Upload/SignedUrlUploader.php +++ b/Core/src/Upload/SignedUrlUploader.php @@ -71,7 +71,7 @@ protected function createResumeUri() { $headers = $this->headers + [ 'Content-Type' => $this->contentType, - 'Content-Length' => 0, + 'Content-Length' => '0', 'x-goog-resumable' => 'start' ]; diff --git a/Core/src/Upload/StreamableUploader.php b/Core/src/Upload/StreamableUploader.php index d3221488309c..8aafac756471 100644 --- a/Core/src/Upload/StreamableUploader.php +++ b/Core/src/Upload/StreamableUploader.php @@ -59,7 +59,7 @@ public function upload($writeSize = null) // do the streaming write $headers = [ - 'Content-Length' => $writeSize, + 'Content-Length' => (string) $writeSize, 'Content-Type' => $this->contentType, 'Content-Range' => "bytes {$this->rangeStart}-$rangeEnd/*" ]; diff --git a/Core/tests/Unit/Upload/MultipartUploaderTest.php b/Core/tests/Unit/Upload/MultipartUploaderTest.php index 91c30a1d654f..89f30d942706 100644 --- a/Core/tests/Unit/Upload/MultipartUploaderTest.php +++ b/Core/tests/Unit/Upload/MultipartUploaderTest.php @@ -137,6 +137,11 @@ public function testStreamWithoutSizeDoesNotReceiveContentLengthHeader($stream, Argument::that( function (RequestInterface $request) use ($shouldContentLengthExist) { $this->assertEquals($request->hasHeader('Content-Length'), $shouldContentLengthExist); + + foreach ($request->getHeader('Content-Length') as $value) { + $this->assertIsString($value); + } + return true; } ), diff --git a/Core/tests/Unit/Upload/ResumableUploaderTest.php b/Core/tests/Unit/Upload/ResumableUploaderTest.php index 2ab311d396b0..d2b2235926e6 100644 --- a/Core/tests/Unit/Upload/ResumableUploaderTest.php +++ b/Core/tests/Unit/Upload/ResumableUploaderTest.php @@ -111,7 +111,9 @@ public function testGetResumeUri() $response = new Response(200, ['Location' => $resumeUri]); $this->requestWrapper->send( - Argument::type(RequestInterface::class), + Argument::that(function (RequestInterface $request) { + return $request->getHeader('X-Upload-Content-Length') === ['4']; + }), Argument::type('array') )->willReturn($response); @@ -282,6 +284,7 @@ public function testUploadDoesNotSendGoogHashOnIntermediateChunk() $this->requestWrapper->send( Argument::that(function (RequestInterface $request) { return $request->getHeaderLine('Content-Range') === 'bytes 0-1/4' + && $request->getHeader('Content-Length') === ['2'] && !$request->hasHeader('X-Goog-Hash'); }), Argument::type('array') diff --git a/Core/tests/Unit/Upload/SignedUrlUploaderTest.php b/Core/tests/Unit/Upload/SignedUrlUploaderTest.php index 8188a8c84553..b7c376037b3d 100644 --- a/Core/tests/Unit/Upload/SignedUrlUploaderTest.php +++ b/Core/tests/Unit/Upload/SignedUrlUploaderTest.php @@ -62,7 +62,7 @@ public function testGetResumeUri() return false; } - if ($arg->getHeaderLine('Content-Length') != 0) { + if ($arg->getHeader('Content-Length') !== ['0']) { return false; } diff --git a/Core/tests/Unit/Upload/StreamableUploaderTest.php b/Core/tests/Unit/Upload/StreamableUploaderTest.php index 2dfeb0422db2..79434c7376c0 100644 --- a/Core/tests/Unit/Upload/StreamableUploaderTest.php +++ b/Core/tests/Unit/Upload/StreamableUploaderTest.php @@ -160,7 +160,7 @@ public function testLastChunkSendsCorrectHeaders() $this->requestWrapper->send( Argument::that(function ($request) { - return $request->getHeaderLine('Content-Length') == '10'; + return $request->getHeader('Content-Length') === ['10']; }), Argument::type('array') )->willReturn($response)->shouldBeCalled();