Browse Source

debug: fix off-by-one error when formatting to allocated buffer

pull/2471/head
Maxim Prokhorov 2 years ago
parent
commit
efcb863ca2
1 changed files with 8 additions and 5 deletions
  1. +8
    -5
      code/espurna/debug.cpp

+ 8
- 5
code/espurna/debug.cpp View File

@ -166,6 +166,9 @@ void delayedEnable() {
}
void send(const char* message, size_t len, Timestamp);
void send(const char* message, size_t len) {
send(message, len, build::AddTimestamp);
}
void formatAndSend(const char* format, va_list args) {
constexpr size_t SmallStringBufferSize { 128 };
@ -179,18 +182,18 @@ void formatAndSend(const char* format, va_list args) {
// strlen(...) + '\0' already in temp buffer, avoid (explicit) dynamic memory when possible
// (TODO: printf might still do it anyway internally?)
if (static_cast<size_t>(len) < sizeof(temp)) {
send(temp, len, build::AddTimestamp);
send(temp, len);
return;
}
len += 1;
auto* buffer = new (std::nothrow) char[len];
const size_t BufferSize { len + 1 };
auto* buffer = new (std::nothrow) char[BufferSize];
if (!buffer) {
return;
}
vsnprintf_P(buffer, len, format, args);
send(buffer, len, build::AddTimestamp);
vsnprintf_P(buffer, BufferSize, format, args);
send(buffer, len);
delete[] buffer;
}


Loading…
Cancel
Save