Fix Ender 3 V2 (DWIN) buffer overrun (#19268)

This commit is contained in:
cosmoderp 2020-09-06 18:34:08 -04:00 committed by GitHub
parent 486731162f
commit 86b71b83fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -37,9 +37,9 @@
#include "dwin_lcd.h" #include "dwin_lcd.h"
#include <string.h> // for memset #include <string.h> // for memset
// Make sure DWIN_SendBuf is large enough to hold the largest // Make sure DWIN_SendBuf is large enough to hold the largest string plus draw command and tail.
// printed string plus the draw command and tail. // Assume the narrowest (6 pixel) font and 2-byte gb2312-encoded characters.
uint8_t DWIN_SendBuf[11 + 24] = { 0xAA }; uint8_t DWIN_SendBuf[11 + DWIN_WIDTH / 6 * 2] = { 0xAA };
uint8_t DWIN_BufTail[4] = { 0xCC, 0x33, 0xC3, 0x3C }; uint8_t DWIN_BufTail[4] = { 0xCC, 0x33, 0xC3, 0x3C };
uint8_t databuf[26] = { 0 }; uint8_t databuf[26] = { 0 };
uint8_t receivedType; uint8_t receivedType;
@ -63,7 +63,7 @@ inline void DWIN_Long(size_t &i, const uint32_t lval) {
} }
inline void DWIN_String(size_t &i, char * const string) { inline void DWIN_String(size_t &i, char * const string) {
const size_t len = strlen(string); const size_t len = _MIN(sizeof(DWIN_SendBuf) - i, strlen(string));
memcpy(&DWIN_SendBuf[i+1], string, len); memcpy(&DWIN_SendBuf[i+1], string, len);
i += len; i += len;
} }