From d14cacd791ac553b5dfba5f303fc631b42f6e662 Mon Sep 17 00:00:00 2001 From: Petter Strandmark Date: Fri, 4 May 2018 20:37:03 +0200 Subject: [PATCH] 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(-) diff --git a/src/google/protobuf/io/printer.cc b/src/google/protobuf/io/printer.cc index 8493268dad..de67cef134 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;