From: Debian Qt/KDE Maintainers Date: Fri, 1 Jul 2022 19:49:23 +0000 (+0100) Subject: H2: remove a rather useless limit on the number of streams X-Git-Tag: archive/raspbian/5.15.4+dfsg-4+rpi1^2~13 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=14a532d643a89fa933c2887248ab00abab6e1fd4;p=qtbase-opensource-src.git H2: remove a rather useless limit on the number of streams Origin: upstream, https://code.qt.io/cgit/qt/qtbase.git/commit/?id=46940ca73791e87e Last-Update: 2022-06-20 SETTINGS for max concurrect number of streams is 'one direction' - this is how our peer conveys the possible number of streams _we_ can open, not _them_. If they choose to have it unlimited - let it be so. It's possible to send 0 as maximum number, also, it's possible to reduce the maximum compared to initial at some point - then I have to avoid integer overflows. Gbp-Pq: Name remove_limit_on_number_of_streams.diff --- diff --git a/src/network/access/http2/http2protocol_p.h b/src/network/access/http2/http2protocol_p.h index b0af5aa91..ed5f2bf56 100644 --- a/src/network/access/http2/http2protocol_p.h +++ b/src/network/access/http2/http2protocol_p.h @@ -133,9 +133,6 @@ enum Http2PredefinedParameters maxPayloadSize = (1 << 24) - 1, // HTTP/2 6.5.2 defaultSessionWindowSize = 65535, // HTTP/2 6.5.2 - // Using 1000 (rather arbitrarily), just to - // impose *some* upper limit: - maxPeerConcurrentStreams = 1000, maxConcurrentStreams = 100 // HTTP/2, 6.5.2 }; diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp index 91c41d824..447e37640 100644 --- a/src/network/access/qhttp2protocolhandler.cpp +++ b/src/network/access/qhttp2protocolhandler.cpp @@ -393,7 +393,8 @@ bool QHttp2ProtocolHandler::sendRequest() initReplyFromPushPromise(message, key); } - const auto streamsToUse = std::min(maxConcurrentStreams - activeStreams.size(), + const auto streamsToUse = std::min(maxConcurrentStreams > activeStreams.size() + ? maxConcurrentStreams - activeStreams.size() : 0, requests.size()); auto it = requests.begin(); for (quint32 i = 0; i < streamsToUse; ++i) { @@ -1078,13 +1079,8 @@ bool QHttp2ProtocolHandler::acceptSetting(Http2::Settings identifier, quint32 ne QMetaObject::invokeMethod(this, "resumeSuspendedStreams", Qt::QueuedConnection); } - if (identifier == Settings::MAX_CONCURRENT_STREAMS_ID) { - if (newValue > maxPeerConcurrentStreams) { - connectionError(PROTOCOL_ERROR, "SETTINGS invalid number of concurrent streams"); - return false; - } + if (identifier == Settings::MAX_CONCURRENT_STREAMS_ID) maxConcurrentStreams = newValue; - } if (identifier == Settings::MAX_FRAME_SIZE_ID) { if (newValue < Http2::minPayloadLimit || newValue > Http2::maxPayloadSize) {