[scudo] Remove ScopedString::Length

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

GitOrigin-RevId: 70b29213eb3446ffb85678da3cc447f478e27e15
diff --git a/string_utils.cpp b/string_utils.cpp
index ca80834..acf8588 100644
--- a/string_utils.cpp
+++ b/string_utils.cpp
@@ -219,7 +219,6 @@
 }
 
 void ScopedString::append(const char *Format, va_list Args) {
-  RAW_CHECK(Length <= String.size());
   va_list ArgsCopy;
   va_copy(ArgsCopy, Args);
   // formatString doesn't currently support a null buffer or zero buffer length,
@@ -228,11 +227,13 @@
   char C[1];
   const uptr AdditionalLength =
       static_cast<uptr>(formatString(C, sizeof(C), Format, Args)) + 1;
+  const uptr Length = length();
   String.resize(Length + AdditionalLength);
-  formatString(String.data() + Length, AdditionalLength, Format, ArgsCopy);
+  const uptr FormattedLength = static_cast<uptr>(formatString(
+      String.data() + Length, String.size() - Length, Format, ArgsCopy));
+  RAW_CHECK(data()[length()] == '\0');
+  RAW_CHECK(FormattedLength + 1 == AdditionalLength);
   va_end(ArgsCopy);
-  Length = strlen(String.data());
-  RAW_CHECK(Length < String.size());
 }
 
 FORMAT(2, 3)
diff --git a/string_utils.h b/string_utils.h
index 7d9c539..06d23d4 100644
--- a/string_utils.h
+++ b/string_utils.h
@@ -19,12 +19,11 @@
 class ScopedString {
 public:
   explicit ScopedString() { String.push_back('\0'); }
-  uptr length() { return Length; }
+  uptr length() { return String.size() - 1; }
   const char *data() { return String.data(); }
   void clear() {
     String.clear();
     String.push_back('\0');
-    Length = 0;
   }
   void append(const char *Format, va_list Args);
   void append(const char *Format, ...);
@@ -32,7 +31,6 @@
 
 private:
   Vector<char> String;
-  uptr Length = 0;
 };
 
 int formatString(char *Buffer, uptr BufferLength, const char *Format, ...);