From 0eec8e46c99c1bf4cbb758b90ea26a1a4546c62d Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Fri, 17 Jan 2025 21:36:51 +0100 Subject: [PATCH] robustness: prevent negative transitions fix for a corner case that might lead to unexpected math overflow --- wled00/led.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wled00/led.cpp b/wled00/led.cpp index 7254184f..73a72af8 100644 --- a/wled00/led.cpp +++ b/wled00/led.cpp @@ -194,7 +194,7 @@ void handleTransitions() if (transitionActive && transitionDelayTemp > 0) { float tper = (millis() - transitionStartTime)/(float)transitionDelayTemp; - if (tper >= 1.0f) + if ((tper >= 1.0f) || (tper < 0.0f)) // WLEDMM also catch "<0" case, that may happen when millis() rolls over { strip.setTransitionMode(false); // restore (global) transition time if not called from UDP notifier or single/temporary transition from JSON (also playlist) @@ -207,7 +207,7 @@ void handleTransitions() } if (tper - tperLast < 0.004f) return; tperLast = tper; - briT = briOld + ((bri - briOld) * tper); + briT = briOld + ((int(bri) - int(briOld)) * tper); // WLEDMM avoid undefined behaviour when briOld < bri applyBri(); }