From d14cacd791ac553b5dfba5f303fc631b42f6e662 Mon Sep 17 00:00:00 2001 From: Petter Strandmark Date: Fri, 4 May 2018 20:37:03 +0200 Subject: Fix error in Clang UndefinedBehaviorSanitizer Pointer Arguments to memcpy can not be null in UndefinedBehaviorSanitizer. In this case, both the memory and the size was zero. This change allows protoc to run under UndefinedBehaviorSanitizer. --- src/google/protobuf/io/printer.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/google/protobuf/io/printer.cc b/src/google/protobuf/io/printer.cc index 8493268d..de67cef1 100644 --- a/src/google/protobuf/io/printer.cc +++ b/src/google/protobuf/io/printer.cc @@ -350,10 +350,12 @@ void Printer::CopyToBuffer(const char* data, int size) { while (size > buffer_size_) { // Data exceeds space in the buffer. Copy what we can and request a // new buffer. - memcpy(buffer_, data, buffer_size_); - offset_ += buffer_size_; - data += buffer_size_; - size -= buffer_size_; + if (buffer_size_ > 0) { + memcpy(buffer_, data, buffer_size_); + offset_ += buffer_size_; + data += buffer_size_; + size -= buffer_size_; + } void* void_buffer; failed_ = !output_->Next(&void_buffer, &buffer_size_); if (failed_) return; -- cgit v1.2.3