Skip to content

Commit 600e2d6

Browse files
committed
libraries: Fix possible buffer/stack overflows in multiple libraries.
`vsprintf` should be avoided as it could easily overflow the buffer if the formatted string exceeds the max buffer size. `vsnprintf`, on the other hand, checks a buffer size argument. Note that they both null-terminate the string, so calling `memset` beforehand is not necessary. Signed-off-by: iabdalkader <[email protected]>
1 parent 74921ae commit 600e2d6

File tree

4 files changed

+6
-9
lines changed

4 files changed

+6
-9
lines changed

Diff for: libraries/SE05X/src/lib/platform/arduino/sm_port.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ void smlog_print(const char *format, ...) {
2323
char debug_buf[1024];
2424
va_list argptr;
2525
va_start(argptr, format);
26-
vsprintf(debug_buf, format, argptr);
26+
vsnprintf(debug_buf, sizeof(debug_buf), format, argptr);
2727
va_end(argptr);
2828
Serial.print(debug_buf);
2929
}

Diff for: libraries/SSLClient/src/ssl_debug.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ void ssl_debug_print(const char *format, ...) {
2323
char debug_buf[1024];
2424
va_list argptr;
2525
va_start(argptr, format);
26-
vsprintf(debug_buf, format, argptr);
26+
vsnprintf(debug_buf, sizeof(debug_buf), format, argptr);
2727
va_end(argptr);
2828
Serial.print(debug_buf);
2929
}
@@ -32,7 +32,7 @@ void ssl_debug_println(const char *format, ...) {
3232
char debug_buf[1024];
3333
va_list argptr;
3434
va_start(argptr, format);
35-
vsprintf(debug_buf, format, argptr);
35+
vsnprintf(debug_buf, sizeof(debug_buf), format, argptr);
3636
va_end(argptr);
3737
Serial.println(debug_buf);
3838
}

Diff for: libraries/WiFiS3/src/Modem.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,9 @@ bool ModemClass::passthrough(const uint8_t *data, size_t size) {
8888
/* -------------------------------------------------------------------------- */
8989
void ModemClass::write_nowait(const string &cmd, string &str, char * fmt, ...) {
9090
/* -------------------------------------------------------------------------- */
91-
memset(tx_buff,0x00,MAX_BUFF_SIZE);
9291
va_list va;
9392
va_start (va, fmt);
94-
vsprintf ((char *)tx_buff, fmt, va);
93+
vsnprintf((char *)tx_buff, MAX_BUFF_SIZE, fmt, va);
9594
va_end (va);
9695

9796
if(_serial_debug && _debug_level >= 2) {
@@ -109,10 +108,9 @@ void ModemClass::write_nowait(const string &cmd, string &str, char * fmt, ...) {
109108
bool ModemClass::write(const string &prompt, string &data_res, char * fmt, ...){
110109
/* -------------------------------------------------------------------------- */
111110
data_res.clear();
112-
memset(tx_buff,0x00,MAX_BUFF_SIZE);
113111
va_list va;
114112
va_start (va, fmt);
115-
vsprintf ((char *)tx_buff, fmt, va);
113+
vsnprintf((char *)tx_buff, MAX_BUFF_SIZE, fmt, va);
116114
va_end (va);
117115

118116
if(_serial_debug) {

Diff for: libraries/lwIpWrapper/src/CNetIf.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -1567,10 +1567,9 @@ char b_dbg[512];
15671567
extern "C" void printDbg(const char* fmt, ...)
15681568
{
15691569

1570-
memset(b_dbg, 0x00, 256);
15711570
va_list va;
15721571
va_start(va, fmt);
1573-
vsprintf(b_dbg, fmt, va);
1572+
vsnprintf(b_dbg, sizeof(b_dbg), fmt, va);
15741573
va_end(va);
15751574

15761575
Serial.println(b_dbg);

0 commit comments

Comments
 (0)