From a9eb7cb4fdf0f33ecf137095459793b908c64328 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:07:23 +0100 Subject: [PATCH] udp realtime - improve robustness against short packets (fix for #3672) when only two bytes were received in a packet, the "for" condition `packetsize -3` would underflow, leading to an infinite loop. --- wled00/udp.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wled00/udp.cpp b/wled00/udp.cpp index 32367e7d72..07ce9eb706 100644 --- a/wled00/udp.cpp +++ b/wled00/udp.cpp @@ -525,7 +525,7 @@ void handleNotifications() if (realtimeOverride && !(realtimeMode && useMainSegmentOnly)) return; uint16_t totalLen = strip.getLengthTotal(); - if (udpIn[0] == 1) //warls + if ((udpIn[0] == 1) && (packetSize > 5)) //warls - avoiding infinite "for" loop (unsigned underflow) { for (size_t i = 2; i < packetSize -3; i += 4) { @@ -540,7 +540,7 @@ void handleNotifications() id++; if (id >= totalLen) break; } - } else if (udpIn[0] == 3) //drgbw + } else if ((udpIn[0] == 3) && (packetSize > 5)) //drgbw - avoiding infinite "for" loop (unsigned underflow) { uint16_t id = 0; for (size_t i = 2; i < packetSize -3; i += 4)