[scudo] Change overloaded function name append.
authorChristopher Ferris <cferris@google.com>
Wed, 21 Jun 2023 00:43:11 +0000 (17:43 -0700)
committerChristopher Ferris <cferris@google.com>
Wed, 21 Jun 2023 22:11:47 +0000 (15:11 -0700)
The ScopedString class has two functions named append. One takes
a va_list, but on some platforms va_list is typedef'd to char*.
That means that this call:

  std::string value;
  Str.append("print this string %s", value.c_str());

The compiler can incorrectly think this is the va_list function,
leading to crashes when calling this. To fix this, change the name
of the va_list function to be vappend to avoid this.

Fix https://github.com/llvm/llvm-project/issues/62893

Reviewed By: Chia-hungDuan

Differential Revision: https://reviews.llvm.org/D153389

compiler-rt/lib/scudo/standalone/report.cpp
compiler-rt/lib/scudo/standalone/string_utils.cpp
compiler-rt/lib/scudo/standalone/string_utils.h

index 16eae8c..81b3dce 100644 (file)
@@ -21,7 +21,7 @@ public:
   void append(const char *Format, ...) {
     va_list Args;
     va_start(Args, Format);
-    Message.append(Format, Args);
+    Message.vappend(Format, Args);
     va_end(Args);
   }
   NORETURN ~ScopedErrorReport() {
index 7e516f9..d4e4e3b 100644 (file)
@@ -240,7 +240,7 @@ int formatString(char *Buffer, uptr BufferLength, const char *Format, ...) {
   return Res;
 }
 
-void ScopedString::append(const char *Format, va_list Args) {
+void ScopedString::vappend(const char *Format, va_list Args) {
   va_list ArgsCopy;
   va_copy(ArgsCopy, Args);
   // formatString doesn't currently support a null buffer or zero buffer length,
@@ -261,7 +261,7 @@ void ScopedString::append(const char *Format, va_list Args) {
 void ScopedString::append(const char *Format, ...) {
   va_list Args;
   va_start(Args, Format);
-  append(Format, Args);
+  vappend(Format, Args);
   va_end(Args);
 }
 
@@ -269,7 +269,7 @@ void Printf(const char *Format, ...) {
   va_list Args;
   va_start(Args, Format);
   ScopedString Msg;
-  Msg.append(Format, Args);
+  Msg.vappend(Format, Args);
   outputRaw(Msg.data());
   va_end(Args);
 }
index 4190119..a4cab52 100644 (file)
@@ -25,7 +25,7 @@ public:
     String.clear();
     String.push_back('\0');
   }
-  void append(const char *Format, va_list Args);
+  void vappend(const char *Format, va_list Args);
   void append(const char *Format, ...) FORMAT(2, 3);
   void output() const { outputRaw(String.data()); }
   void reserve(size_t Size) { String.reserve(Size + 1); }