[compiler-rt] a27c416 - [scudo] Change overloaded function name append.

Christopher Ferris via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 21 15:11:58 PDT 2023


Author: Christopher Ferris
Date: 2023-06-21T15:11:47-07:00
New Revision: a27c416b89249c1c4c5f47db45d1be690eb928df

URL: https://github.com/llvm/llvm-project/commit/a27c416b89249c1c4c5f47db45d1be690eb928df
DIFF: https://github.com/llvm/llvm-project/commit/a27c416b89249c1c4c5f47db45d1be690eb928df.diff

LOG: [scudo] Change overloaded function name append.

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

Added: 
    

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

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/scudo/standalone/report.cpp b/compiler-rt/lib/scudo/standalone/report.cpp
index 16eae8c3136d4..81b3dce4e02c1 100644
--- a/compiler-rt/lib/scudo/standalone/report.cpp
+++ b/compiler-rt/lib/scudo/standalone/report.cpp
@@ -21,7 +21,7 @@ class ScopedErrorReport {
   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() {

diff  --git a/compiler-rt/lib/scudo/standalone/string_utils.cpp b/compiler-rt/lib/scudo/standalone/string_utils.cpp
index 7e516f957abd6..d4e4e3becd0e1 100644
--- a/compiler-rt/lib/scudo/standalone/string_utils.cpp
+++ b/compiler-rt/lib/scudo/standalone/string_utils.cpp
@@ -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);
 }

diff  --git a/compiler-rt/lib/scudo/standalone/string_utils.h b/compiler-rt/lib/scudo/standalone/string_utils.h
index 41901194dfdc3..a4cab5268ede4 100644
--- a/compiler-rt/lib/scudo/standalone/string_utils.h
+++ b/compiler-rt/lib/scudo/standalone/string_utils.h
@@ -25,7 +25,7 @@ class ScopedString {
     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); }


        


More information about the llvm-commits mailing list