diff --git a/Storage/src/ReadStream.php b/Storage/src/ReadStream.php index eddbacf89b00..bf1c7c2535dc 100644 --- a/Storage/src/ReadStream.php +++ b/Storage/src/ReadStream.php @@ -60,7 +60,13 @@ public function getSize(): ?int */ private function getSizeFromMetadata(): int { - foreach ($this->stream->getMetadata('wrapper_data') as $value) { + $metadata = $this->stream->getMetadata('wrapper_data'); + + if (is_null($metadata)) { + return 0; + } + + foreach ($metadata as $value) { if (substr($value, 0, 15) == 'Content-Length:') { return (int) substr($value, 16); } diff --git a/Storage/tests/Unit/ReadStreamTest.php b/Storage/tests/Unit/ReadStreamTest.php index 36b1db1bf466..01ff740eb3f1 100644 --- a/Storage/tests/Unit/ReadStreamTest.php +++ b/Storage/tests/Unit/ReadStreamTest.php @@ -73,4 +73,15 @@ public function testNoContentLengthHeader() $this->assertEquals(0, $stream->getSize()); } + + public function testReturnsZeroWhenGetSizeIsZeroAndWrapperDataIsNull() + { + $httpStream = $this->prophesize(StreamInterface::class); + $httpStream->getSize()->willReturn(null); + $httpStream->getMetadata('wrapper_data')->willReturn(null); + + $stream = new ReadStream($httpStream->reveal()); + + $this->assertEquals(0, $stream->getSize()); + } }