From c25d8a5e6c3928a33d126852aaa0ee145cc72454 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 3 Jan 2026 21:29:11 +0000 Subject: [PATCH] Improve retry logic safety and readability - Add named constants for retry-eligible HTTP status codes (500, 503) - Add bounds checking in backoff calculation to prevent integer overflow - Use kMaxBackoffShift constant to limit bit shift operations - Improves code safety and readability Co-authored-by: jonaski <10343810+jonaski@users.noreply.github.com> --- src/scrobbler/lastfmimport.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/scrobbler/lastfmimport.cpp b/src/scrobbler/lastfmimport.cpp index 02e305b01..10a562489 100644 --- a/src/scrobbler/lastfmimport.cpp +++ b/src/scrobbler/lastfmimport.cpp @@ -55,6 +55,9 @@ namespace { constexpr int kRequestsDelay = 2000; constexpr int kMaxRetries = 5; constexpr int kInitialBackoffMs = 5000; +constexpr int kMaxBackoffShift = 10; // Maximum shift value to prevent overflow +constexpr int kRetryHttpStatusCode1 = 500; // Internal Server Error +constexpr int kRetryHttpStatusCode2 = 503; // Service Unavailable } LastFMImport::LastFMImport(const SharedPtr network, QObject *parent) @@ -546,11 +549,14 @@ void LastFMImport::GetTopTracksRequestFinished(QNetworkReply *reply, GetTopTrack } bool LastFMImport::ShouldRetryRequest(const JsonObjectResult &result) const { - return result.http_status_code == 500 || result.http_status_code == 503 || result.network_error == QNetworkReply::TemporaryNetworkFailureError; + return result.http_status_code == kRetryHttpStatusCode1 || + result.http_status_code == kRetryHttpStatusCode2 || + result.network_error == QNetworkReply::TemporaryNetworkFailureError; } int LastFMImport::CalculateBackoffDelay(const int retry_count) const { - return kInitialBackoffMs * (1 << retry_count); + const int safe_shift = std::min(retry_count, kMaxBackoffShift); + return kInitialBackoffMs * (1 << safe_shift); } void LastFMImport::UpdateTotalCheck() {