From 3f329e464dd423121b1d01be1a387a97b9f5697b Mon Sep 17 00:00:00 2001 From: psykose Date: Sat, 27 Jan 2024 08:48:25 +0000 Subject: [PATCH] GUI: fix overflow in timers these timer variables are used with SDL_GetPerformanceCounter, which returns a uint64_t. subtracting these can overflow, which is UB. --- src/gui/gui.cpp | 2 +- src/gui/gui.h | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 21e2e5164..60bddd006 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -3411,7 +3411,7 @@ bool FurnaceGUI::detectOutOfBoundsWindow(SDL_Rect& failing) { } #define DECLARE_METRIC(_n) \ - int __perfM##_n; + uint64_t __perfM##_n; #define MEASURE_BEGIN(_n) \ __perfM##_n=SDL_GetPerformanceCounter(); diff --git a/src/gui/gui.h b/src/gui/gui.h index b9282b990..22c6a26bc 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -27,6 +27,7 @@ #include "imgui_impl_sdl2.h" #include #include +#include #include #include #include @@ -2164,10 +2165,10 @@ class FurnaceGUI { ImVec2 orderScrollRealOrigin; ImVec2 dragMobileMenuOrigin; - int layoutTimeBegin, layoutTimeEnd, layoutTimeDelta; - int renderTimeBegin, renderTimeEnd, renderTimeDelta; - int drawTimeBegin, drawTimeEnd, drawTimeDelta; - int eventTimeBegin, eventTimeEnd, eventTimeDelta; + uint64_t layoutTimeBegin, layoutTimeEnd, layoutTimeDelta; + uint64_t renderTimeBegin, renderTimeEnd, renderTimeDelta; + uint64_t drawTimeBegin, drawTimeEnd, drawTimeDelta; + uint64_t eventTimeBegin, eventTimeEnd, eventTimeDelta; FurnaceGUIPerfMetric perfMetrics[64]; int perfMetricsLen;