From 4aabee2443b8a1650679a733e861935801bd3754 Mon Sep 17 00:00:00 2001 From: Niklas Keller Date: Sun, 3 Sep 2023 19:16:37 +0200 Subject: [PATCH] Fix window size if body size limit is large Fixes #355. --- src/Driver/Http2Driver.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Driver/Http2Driver.php b/src/Driver/Http2Driver.php index fa758238..0188f689 100644 --- a/src/Driver/Http2Driver.php +++ b/src/Driver/Http2Driver.php @@ -175,7 +175,7 @@ public function initializeWriting( \pack( "nNnNnNnN", Http2Parser::INITIAL_WINDOW_SIZE, - $this->bodySizeLimit, + $this->initialWindowSize, Http2Parser::MAX_CONCURRENT_STREAMS, $this->concurrentStreamLimit, Http2Parser::MAX_HEADER_LIST_SIZE, @@ -727,7 +727,7 @@ private function readPreface(): string \pack( "nNnNnNnN", Http2Parser::INITIAL_WINDOW_SIZE, - $this->bodySizeLimit, + $this->initialWindowSize, Http2Parser::MAX_CONCURRENT_STREAMS, $this->concurrentStreamLimit, Http2Parser::MAX_HEADER_LIST_SIZE, @@ -1055,9 +1055,12 @@ function (int $bodySize) use ($streamId) { $bodySizeLimit = $this->bodySizeLimit; if ($this->serverWindow <= $bodySizeLimit >> 1) { - $increment = $bodySizeLimit - $this->serverWindow; - $this->serverWindow = $bodySizeLimit; - $this->writeFrame(\pack("N", $increment), Http2Parser::WINDOW_UPDATE, Http2Parser::NO_FLAG); + $increment = \min($bodySizeLimit - $this->serverWindow, self::MAX_INCREMENT); + + if ($increment > 0) { + $this->serverWindow += $increment; + $this->writeFrame(\pack("N", $increment), Http2Parser::WINDOW_UPDATE, Http2Parser::NO_FLAG); + } } if (isset($headers["content-length"])) {