Browse Source

fix: -Wunsafe-buffer-usage warnings in GetNextZoomLevel() (31-x-y) (#43926)

* fix: -Wunsafe-buffer-usage warnings in GetNextZoomLevel() (#43803)

* empty commit
Charles Kerr 6 months ago
parent
commit
f15fea8d03
1 changed files with 18 additions and 14 deletions
  1. 18 14
      shell/browser/ui/inspectable_web_contents.cc

+ 18 - 14
shell/browser/ui/inspectable_web_contents.cc

@@ -5,6 +5,8 @@
 
 #include "shell/browser/ui/inspectable_web_contents.h"
 
+#include <algorithm>
+#include <array>
 #include <memory>
 #include <string_view>
 #include <utility>
@@ -74,10 +76,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&"
@@ -126,16 +124,22 @@ void SetZoomLevelForWebContents(content::WebContents* web_contents,
   content::HostZoomMap::SetZoomLevel(web_contents, level);
 }
 
-double GetNextZoomLevel(double level, bool out) {
-  double factor = blink::PageZoomLevelToZoomFactor(level);
-  size_t size = std::size(kPresetZoomFactors);
-  for (size_t i = 0; i < size; ++i) {
-    if (!blink::PageZoomValuesEqual(kPresetZoomFactors[i], factor))
-      continue;
-    if (out && i > 0)
-      return blink::PageZoomFactorToZoomLevel(kPresetZoomFactors[i - 1]);
-    if (!out && i != size - 1)
-      return blink::PageZoomFactorToZoomLevel(kPresetZoomFactors[i + 1]);
+double GetNextZoomLevel(const double level, const bool out) {
+  static constexpr std::array<double, 16U> 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::PageZoomLevelToZoomFactor(level);
+  auto matches = [=](auto val) {
+    return blink::PageZoomValuesEqual(factor, val);
+  };
+  if (auto iter = std::find_if(kBegin, kEnd, matches); iter != kEnd) {
+    if (out && iter != kBegin)
+      return blink::PageZoomFactorToZoomLevel(*--iter);
+    if (!out && ++iter != kEnd)
+      return blink::PageZoomFactorToZoomLevel(*iter);
   }
   return level;
 }