warn/error line buffer overflow

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2023-10-18 15:15:58 -07:00
parent ce72b26df5
commit 8fe8fdc7aa
1 changed files with 9 additions and 5 deletions

View File

@ -145,12 +145,16 @@ Report::printToBufferAppend(const char *fmt,
// Copy args in case we need to grow the buffer.
va_list args_copy;
va_copy(args_copy, args);
int length = vsnprint(buffer_ + buffer_length_, buffer_size_, fmt, args);
if (buffer_length_ >= buffer_size_) {
size_t length = vsnprint(buffer_ + buffer_length_, buffer_size_- buffer_length_,
fmt, args);
if (length >= buffer_size_) {
buffer_size_ = buffer_length_ + length * 2;
char *new_buffer = new char[buffer_size_];
strncpy(new_buffer, buffer_, buffer_length_);
delete [] buffer_;
buffer_size_ = buffer_length_ * 2;
buffer_ = new char[buffer_size_];
length = vsnprint(buffer_ + buffer_length_, buffer_size_, fmt, args_copy);
buffer_ = new_buffer;
length = vsnprint(buffer_ + buffer_length_, buffer_size_ - buffer_length_,
fmt, args_copy);
}
buffer_length_ += length;
va_end(args_copy);