From 46c9c90ec47b1fa2a9b05580f53d9bd73b8f8a64 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Mon, 17 Mar 2025 11:12:11 +0100 Subject: [PATCH] QNetworkAccessManager: protect more QElapsedTimer with isValid() checks It might be redundant, but I can't definitely prove that these timers are already started by the time we call elapsed() or restart() on them; I "just" think they are because the CI is happy with the existing code, even when adding assertions into QElapsedTimer. As a precautionary measure, add more isValid() protections to QNAM code. Also replace restart() with start() since the return value is unused. Pick-to: 6.8 6.5 Change-Id: Ic64ab27116d8b1cb6c14e18dee79a15aa40844ce Reviewed-by: Marc Mutz (cherry picked from commit dd7065616665e983349263bc5d600d764e164003) Reviewed-by: Qt Cherry-pick Bot --- src/network/access/qnetworkreplyimpl.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index e77163fcb48..a82c01e14cf 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -126,8 +126,9 @@ void QNetworkReplyImplPrivate::_q_copyReadyRead() // emit readyRead before downloadProgress in case this will cause events to be // processed and we get into a recursive call (as in QProgressDialog). emit q->readyRead(); - if (downloadProgressSignalChoke.elapsed() >= progressSignalInterval) { - downloadProgressSignalChoke.restart(); + if (downloadProgressSignalChoke.isValid() && + downloadProgressSignalChoke.elapsed() >= progressSignalInterval) { + downloadProgressSignalChoke.start(); emit q->downloadProgress(bytesDownloaded, totalSizeOpt.value_or(-1)); } resumeNotificationHandling(); @@ -491,8 +492,9 @@ void QNetworkReplyImplPrivate::appendDownstreamDataSignalEmissions() emit q->readyRead(); // emit readyRead before downloadProgress in case this will cause events to be // processed and we get into a recursive call (as in QProgressDialog). - if (downloadProgressSignalChoke.elapsed() >= progressSignalInterval) { - downloadProgressSignalChoke.restart(); + if (downloadProgressSignalChoke.isValid() && + downloadProgressSignalChoke.elapsed() >= progressSignalInterval) { + downloadProgressSignalChoke.start(); emit q->downloadProgress(bytesDownloaded, totalSizeOpt.value_or(-1)); } @@ -580,8 +582,9 @@ void QNetworkReplyImplPrivate::appendDownstreamDataDownloadBuffer(qint64 bytesRe // processed and we get into a recursive call (as in QProgressDialog). if (bytesDownloaded > 0) emit q->readyRead(); - if (downloadProgressSignalChoke.elapsed() >= progressSignalInterval) { - downloadProgressSignalChoke.restart(); + if (downloadProgressSignalChoke.isValid() && + downloadProgressSignalChoke.elapsed() >= progressSignalInterval) { + downloadProgressSignalChoke.start(); emit q->downloadProgress(bytesDownloaded, bytesTotal); } }