From 845dee36a7857002e264bf7f518ac7f4f6d6fce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 4 Nov 2021 13:36:42 +0100 Subject: [PATCH] DebugTools: assert that we don't overflow the counter in FrameProfiler. For example when the profiled value is something really crazy, like a negative value stored in an unsigned type. Before it tripped up on another assert much later, this now makes the problem being caught much earlier. --- src/Magnum/DebugTools/FrameProfiler.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Magnum/DebugTools/FrameProfiler.cpp b/src/Magnum/DebugTools/FrameProfiler.cpp index 12032a91a..2ac005fe0 100644 --- a/src/Magnum/DebugTools/FrameProfiler.cpp +++ b/src/Magnum/DebugTools/FrameProfiler.cpp @@ -229,8 +229,11 @@ void FrameProfiler::endFrame() { /* If we have enough frames, add the new measurement to the moving sum. For _delay of 0 or 1, delayedCurrentData(Math::max(1u, measurement._delay)) is equal to _currentData. */ - if(_measuredFrameCount >= measurementDelay) - _measurements[i]._movingSum += _data[delayedCurrentData(measurementDelay)*_measurements.size() + i]; + if(_measuredFrameCount >= measurementDelay) { + const UnsignedLong data = _data[delayedCurrentData(measurementDelay)*_measurements.size() + i]; + CORRADE_INTERNAL_ASSERT(_measurements[i]._movingSum + data >= _measurements[i]._movingSum); + _measurements[i]._movingSum += data; + } } }