mirror of
https://github.com/xoseperez/espurna.git
synced 2026-03-06 16:27:12 +01:00
debug: fix off-by-one error when formatting to allocated buffer
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user