http2: use qAddOverflow instead of local function
Change-Id: Ice7f0f026353f5668a437cc35d9b21cde0a69182 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Konrad Kujawa <konrad.kujawa@qt.io>
This commit is contained in:
parent
f49e62e782
commit
991053fdff
@ -120,13 +120,6 @@ QUrl urlkey_from_request(const QHttpNetworkRequest &request)
|
|||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sum_will_overflow(qint32 windowSize, qint32 delta)
|
|
||||||
{
|
|
||||||
if (windowSize > 0)
|
|
||||||
return std::numeric_limits<qint32>::max() - windowSize < delta;
|
|
||||||
return std::numeric_limits<qint32>::min() - windowSize > delta;
|
|
||||||
}
|
|
||||||
|
|
||||||
}// Unnamed namespace
|
}// Unnamed namespace
|
||||||
|
|
||||||
// Since we anyway end up having this in every function definition:
|
// Since we anyway end up having this in every function definition:
|
||||||
@ -884,9 +877,10 @@ void QHttp2ProtocolHandler::handleWINDOW_UPDATE()
|
|||||||
const auto streamID = inboundFrame.streamID();
|
const auto streamID = inboundFrame.streamID();
|
||||||
|
|
||||||
if (streamID == Http2::connectionStreamID) {
|
if (streamID == Http2::connectionStreamID) {
|
||||||
if (!valid || sum_will_overflow(sessionSendWindowSize, delta))
|
qint32 sum = 0;
|
||||||
|
if (!valid || qAddOverflow(sessionSendWindowSize, qint32(delta), &sum))
|
||||||
return connectionError(PROTOCOL_ERROR, "WINDOW_UPDATE invalid delta");
|
return connectionError(PROTOCOL_ERROR, "WINDOW_UPDATE invalid delta");
|
||||||
sessionSendWindowSize += delta;
|
sessionSendWindowSize = sum;
|
||||||
} else {
|
} else {
|
||||||
auto it = activeStreams.find(streamID);
|
auto it = activeStreams.find(streamID);
|
||||||
if (it == activeStreams.end()) {
|
if (it == activeStreams.end()) {
|
||||||
@ -894,7 +888,8 @@ void QHttp2ProtocolHandler::handleWINDOW_UPDATE()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Stream &stream = it.value();
|
Stream &stream = it.value();
|
||||||
if (!valid || sum_will_overflow(stream.sendWindow, delta)) {
|
qint32 sum = 0;
|
||||||
|
if (!valid || qAddOverflow(stream.sendWindow, qint32(delta), &sum)) {
|
||||||
finishStreamWithError(stream, QNetworkReply::ProtocolFailure,
|
finishStreamWithError(stream, QNetworkReply::ProtocolFailure,
|
||||||
"invalid WINDOW_UPDATE delta"_L1);
|
"invalid WINDOW_UPDATE delta"_L1);
|
||||||
sendRST_STREAM(streamID, PROTOCOL_ERROR);
|
sendRST_STREAM(streamID, PROTOCOL_ERROR);
|
||||||
@ -902,7 +897,7 @@ void QHttp2ProtocolHandler::handleWINDOW_UPDATE()
|
|||||||
deleteActiveStream(streamID);
|
deleteActiveStream(streamID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
stream.sendWindow += delta;
|
stream.sendWindow = sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Since we're in _q_receiveReply at the moment, let's first handle other
|
// Since we're in _q_receiveReply at the moment, let's first handle other
|
||||||
@ -1033,11 +1028,12 @@ bool QHttp2ProtocolHandler::acceptSetting(Http2::Settings identifier, quint32 ne
|
|||||||
std::vector<quint32> brokenStreams;
|
std::vector<quint32> brokenStreams;
|
||||||
brokenStreams.reserve(activeStreams.size());
|
brokenStreams.reserve(activeStreams.size());
|
||||||
for (auto &stream : activeStreams) {
|
for (auto &stream : activeStreams) {
|
||||||
if (sum_will_overflow(stream.sendWindow, delta)) {
|
qint32 sum = 0;
|
||||||
|
if (qAddOverflow(stream.sendWindow, delta, &sum)) {
|
||||||
brokenStreams.push_back(stream.streamID);
|
brokenStreams.push_back(stream.streamID);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
stream.sendWindow += delta;
|
stream.sendWindow = sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto id : brokenStreams) {
|
for (auto id : brokenStreams) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user