From 41db681f75b2a98798730a0a218d85bd4c206538 Mon Sep 17 00:00:00 2001 From: Karsten Dambekalns Date: Tue, 5 Dec 2023 19:39:01 +0100 Subject: [PATCH 1/2] BUGFIX: Assume content exists, if stream size is unknown If a PSR7 stream is returned from an `ActionController` action, no content arrives at the client, if the stream has an unknown size. Why is that? Because the check in our `ActionResponse` in `hasContent()` is implemented like this: $this->content->getSize() > 0 If a stream returns `null` here, because the size is unknown, we should assume content exists... --- Neos.Flow/Classes/Mvc/ActionResponse.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Neos.Flow/Classes/Mvc/ActionResponse.php b/Neos.Flow/Classes/Mvc/ActionResponse.php index ded3df3dfc..f52ec1a0ac 100644 --- a/Neos.Flow/Classes/Mvc/ActionResponse.php +++ b/Neos.Flow/Classes/Mvc/ActionResponse.php @@ -345,6 +345,7 @@ public function buildHttpResponse(): ResponseInterface */ private function hasContent(): bool { - return $this->content->getSize() > 0; + $contentSize = $this->content->getSize(); + return $contentSize === null || $contentSize > 0; } } From 7da588d5b2dac78c3132a3c0a5150b6cb8b9e297 Mon Sep 17 00:00:00 2001 From: Karsten Dambekalns Date: Wed, 6 Dec 2023 10:30:05 +0100 Subject: [PATCH 2/2] TASK: Check size before setting Content-Length --- Neos.Flow/Classes/Http/Helper/ResponseInformationHelper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Neos.Flow/Classes/Http/Helper/ResponseInformationHelper.php b/Neos.Flow/Classes/Http/Helper/ResponseInformationHelper.php index 9c7fdc0a57..1858a2b88e 100644 --- a/Neos.Flow/Classes/Http/Helper/ResponseInformationHelper.php +++ b/Neos.Flow/Classes/Http/Helper/ResponseInformationHelper.php @@ -228,7 +228,7 @@ public static function makeStandardsCompliant(ResponseInterface $response, Reque } } - if (!$response->hasHeader('Content-Length')) { + if (!$response->hasHeader('Content-Length') && $response->getBody()->getSize() !== null) { $response = $response->withHeader('Content-Length', $response->getBody()->getSize()); }