Critical: DMXsmooth buffer memory corruption fixed

This commit is contained in:
2020-12-17 01:26:23 +03:00
committed by GitHub
parent b0c65eb94b
commit 2d10ac6fbd

View File

@@ -262,7 +262,7 @@ for (int i=1;i<=channels;i++) DmxWrite(i,0);
#ifdef DMX_SMOOTH #ifdef DMX_SMOOTH
if (DMXinterimBuf) delete DMXinterimBuf; if (DMXinterimBuf) delete DMXinterimBuf;
DMXinterimBuf = new uint8_t [channels]; DMXinterimBuf = new uint8_t [channels+1];
DMXOUT_Channels=channels; DMXOUT_Channels=channels;
for (int i=1;i<=channels;i++) DMXinterimBuf[i]=0; for (int i=1;i<=channels;i++) DMXinterimBuf[i]=0;
#endif #endif
@@ -277,24 +277,23 @@ void DMXOUT_propagate()
for(int i=1;i<=DMXOUT_Channels;i++) for(int i=1;i<=DMXOUT_Channels;i++)
{ {
uint8_t currLevel=dmxout.getTx(i); uint8_t currLevel=dmxout.getTx(i);
uint16_t delta = currLevel-DMXinterimBuf[i-1]; int32_t delta = currLevel-DMXinterimBuf[i-1];
if (delta) if (delta)
{ {
uint16_t step = abs(delta) >> 4; uint16_t step = abs(delta) >> 4;
if (!step) step=1; if (!step) step=1;
if (delta<0) if (delta<0)
DmxWrite2(i,currLevel+step); {DmxWrite2(i,currLevel+step);}
if (delta>0) if (delta>0)
DmxWrite2(i,currLevel-step); {DmxWrite2(i,currLevel-step);}
} }
} }
checkTimestamp=now+DMX_SMOOTH_DELAY; checkTimestamp=now+DMX_SMOOTH_DELAY;
#endif #endif
} }
void ArtnetSetup() void ArtnetSetup()
{ {
#ifdef _artnet #ifdef _artnet