From 2d10ac6fbd932b55601df28465c8152bee036556 Mon Sep 17 00:00:00 2001 From: Andrey Klimov Date: Thu, 17 Dec 2020 01:26:23 +0300 Subject: [PATCH] Critical: DMXsmooth buffer memory corruption fixed --- lighthub/dmx.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lighthub/dmx.cpp b/lighthub/dmx.cpp index 91d9aba..968dfc6 100644 --- a/lighthub/dmx.cpp +++ b/lighthub/dmx.cpp @@ -262,7 +262,7 @@ for (int i=1;i<=channels;i++) DmxWrite(i,0); #ifdef DMX_SMOOTH if (DMXinterimBuf) delete DMXinterimBuf; -DMXinterimBuf = new uint8_t [channels]; +DMXinterimBuf = new uint8_t [channels+1]; DMXOUT_Channels=channels; for (int i=1;i<=channels;i++) DMXinterimBuf[i]=0; #endif @@ -277,24 +277,23 @@ void DMXOUT_propagate() for(int i=1;i<=DMXOUT_Channels;i++) { uint8_t currLevel=dmxout.getTx(i); - uint16_t delta = currLevel-DMXinterimBuf[i-1]; + int32_t delta = currLevel-DMXinterimBuf[i-1]; if (delta) { uint16_t step = abs(delta) >> 4; if (!step) step=1; if (delta<0) - DmxWrite2(i,currLevel+step); + {DmxWrite2(i,currLevel+step);} if (delta>0) - DmxWrite2(i,currLevel-step); + {DmxWrite2(i,currLevel-step);} } } checkTimestamp=now+DMX_SMOOTH_DELAY; #endif } - void ArtnetSetup() { #ifdef _artnet