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

This commit is contained in:
Maxim Prokhorov
2021-08-17 01:11:56 +03:00
parent d9662bd66a
commit efcb863ca2

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;
}