From 6748b6155e0bdb61aa33ecfe467711ce7e1189c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Wed, 11 Nov 2015 15:24:59 -0800 Subject: [PATCH] [core] Fixed bit-shifting error in exponential backoff This change fixes a bug introduced in 4d5c6333be52aae4a9c72f4b01941e16ead503f4 for #2727. 1 << 32 would exceed the size of int64_t. The static analyzer reported undefined behavior here because std::min() might or might not return 32. --- src/mbgl/storage/default_file_source.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mbgl/storage/default_file_source.cpp b/src/mbgl/storage/default_file_source.cpp index 64c802d77..bfab5bfca 100644 --- a/src/mbgl/storage/default_file_source.cpp +++ b/src/mbgl/storage/default_file_source.cpp @@ -325,12 +325,12 @@ int64_t DefaultFileRequest::getRetryTimeout() const { if (failedRequests <= graceRetries) { timeout = 1; } else { - timeout = 1 << std::min(failedRequests - graceRetries, 32); + timeout = 1 << std::min(failedRequests - graceRetries, 31); } } break; case Response::Error::Reason::Connection: { // Exponential backoff - timeout = 1 << std::min(failedRequests - 1, 32); + timeout = 1 << std::min(failedRequests - 1, 31); } break; default: // Do not retry due to error.