From 7f473f2fbabbd12b4f8c96cfb31d0c912694352f Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Sun, 22 Sep 2024 07:11:49 -0500 Subject: [PATCH] fix: -Wunsafe-buffer-usage warnings in GetNextZoomLevel() (#43820) Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Charles Kerr --- shell/browser/ui/inspectable_web_contents.cc | 29 ++++++++++---------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/shell/browser/ui/inspectable_web_contents.cc b/shell/browser/ui/inspectable_web_contents.cc index b613e0f6d753..457e6f333940 100644 --- a/shell/browser/ui/inspectable_web_contents.cc +++ b/shell/browser/ui/inspectable_web_contents.cc @@ -6,6 +6,7 @@ #include "shell/browser/ui/inspectable_web_contents.h" #include +#include #include #include #include @@ -71,10 +72,6 @@ namespace electron { namespace { -const double kPresetZoomFactors[] = {0.25, 0.333, 0.5, 0.666, 0.75, 0.9, - 1.0, 1.1, 1.25, 1.5, 1.75, 2.0, - 2.5, 3.0, 4.0, 5.0}; - const char kChromeUIDevToolsURL[] = "devtools://devtools/bundled/devtools_app.html?" "remoteBase=%s&" @@ -123,16 +120,20 @@ void SetZoomLevelForWebContents(content::WebContents* web_contents, content::HostZoomMap::SetZoomLevel(web_contents, level); } -double GetNextZoomLevel(double level, bool out) { - double factor = blink::ZoomLevelToZoomFactor(level); - size_t size = std::size(kPresetZoomFactors); - for (size_t i = 0; i < size; ++i) { - if (!blink::ZoomValuesEqual(kPresetZoomFactors[i], factor)) - continue; - if (out && i > 0) - return blink::ZoomFactorToZoomLevel(kPresetZoomFactors[i - 1]); - if (!out && i != size - 1) - return blink::ZoomFactorToZoomLevel(kPresetZoomFactors[i + 1]); +double GetNextZoomLevel(const double level, const bool out) { + static constexpr std::array kPresetFactors{ + 0.25, 0.333, 0.5, 0.666, 0.75, 0.9, 1.0, 1.1, + 1.25, 1.5, 1.75, 2.0, 2.5, 3.0, 4.0, 5.0}; + static constexpr auto kBegin = kPresetFactors.begin(); + static constexpr auto kEnd = kPresetFactors.end(); + + const double factor = blink::ZoomLevelToZoomFactor(level); + auto matches = [=](auto val) { return blink::ZoomValuesEqual(factor, val); }; + if (auto iter = std::find_if(kBegin, kEnd, matches); iter != kEnd) { + if (out && iter != kBegin) + return blink::ZoomFactorToZoomLevel(*--iter); + if (!out && ++iter != kEnd) + return blink::ZoomFactorToZoomLevel(*iter); } return level; }