Reland "Change SimpleStringBuilder::Append to not use strcpyn and SIZE_UNKNOWN"

This is a reland of e779847fb6499ac2dc4757de8c625ac377e9d0d4

Original change's description:
> Change SimpleStringBuilder::Append to not use strcpyn and SIZE_UNKNOWN
>
> Also add explicit includes of rtc_base/string_utils.h in files depending on it.
>
> Bug: webrtc:6424
> Change-Id: Id6b53937ab2d185d092a5d8863018fd5f1a88e27
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/135744
> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
> Commit-Queue: Niels Moller <nisse@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#27903}

Tbr: kwiberg@webrtc.org
Bug: webrtc:6424
Change-Id: Ic08d5d7fbc25ff89e4182d7c9cb3b0e8e356339a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/135946
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27957}
diff --git a/media/sctp/sctp_transport.cc b/media/sctp/sctp_transport.cc
index b99a55b..0858401 100644
--- a/media/sctp/sctp_transport.cc
+++ b/media/sctp/sctp_transport.cc
@@ -36,6 +36,7 @@
 #include "rtc_base/helpers.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/numerics/safe_conversions.h"
+#include "rtc_base/string_utils.h"
 #include "rtc_base/thread_checker.h"
 #include "rtc_base/trace_event.h"
 #include "usrsctplib/usrsctp.h"
diff --git a/modules/audio_device/win/core_audio_utility_win.h b/modules/audio_device/win/core_audio_utility_win.h
index 0ef16ff..6e2c85b 100644
--- a/modules/audio_device/win/core_audio_utility_win.h
+++ b/modules/audio_device/win/core_audio_utility_win.h
@@ -26,6 +26,7 @@
 #include "modules/audio_device/audio_device_name.h"
 #include "modules/audio_device/include/audio_device_defines.h"
 #include "rtc_base/logging.h"
+#include "rtc_base/string_utils.h"
 
 #pragma comment(lib, "Avrt.lib")
 
diff --git a/p2p/base/port.cc b/p2p/base/port.cc
index 645cc65..b6fca24 100644
--- a/p2p/base/port.cc
+++ b/p2p/base/port.cc
@@ -29,6 +29,7 @@
 #include "rtc_base/network.h"
 #include "rtc_base/numerics/safe_minmax.h"
 #include "rtc_base/string_encode.h"
+#include "rtc_base/string_utils.h"
 #include "rtc_base/third_party/base64/base64.h"
 #include "system_wrappers/include/field_trial.h"
 
diff --git a/pc/webrtc_sdp.cc b/pc/webrtc_sdp.cc
index 0c09fa2..96be3b2 100644
--- a/pc/webrtc_sdp.cc
+++ b/pc/webrtc_sdp.cc
@@ -45,6 +45,7 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/message_digest.h"
+#include "rtc_base/string_utils.h"
 #include "rtc_base/strings/string_builder.h"
 #include "rtc_base/third_party/base64/base64.h"
 
diff --git a/rtc_base/http_common.cc b/rtc_base/http_common.cc
index 0456eea..10cfb3a 100644
--- a/rtc_base/http_common.cc
+++ b/rtc_base/http_common.cc
@@ -30,6 +30,7 @@
 #include "rtc_base/logging.h"
 #include "rtc_base/message_digest.h"
 #include "rtc_base/socket_address.h"
+#include "rtc_base/string_utils.h"
 #include "rtc_base/strings/string_builder.h"
 #include "rtc_base/third_party/base64/base64.h"  // for Base64
 #include "rtc_base/zero_memory.h"                // for ExplicitZeroMemory
diff --git a/rtc_base/strings/string_builder.cc b/rtc_base/strings/string_builder.cc
index 73d763a..a204e52 100644
--- a/rtc_base/strings/string_builder.cc
+++ b/rtc_base/strings/string_builder.cc
@@ -26,7 +26,7 @@
 }
 
 SimpleStringBuilder& SimpleStringBuilder::operator<<(const char* str) {
-  return Append(str);
+  return Append(str, strlen(str));
 }
 
 SimpleStringBuilder& SimpleStringBuilder::operator<<(char ch) {
@@ -107,11 +107,12 @@
 
 SimpleStringBuilder& SimpleStringBuilder::Append(const char* str,
                                                  size_t length) {
-  const size_t chars_added =
-      rtc::strcpyn(&buffer_[size_], buffer_.size() - size_, str, length);
-  size_ += chars_added;
-  RTC_DCHECK_EQ(chars_added, length == SIZE_UNKNOWN ? std::strlen(str) : length)
+  RTC_DCHECK_LT(size_ + length, buffer_.size())
       << "Buffer size was insufficient";
+  const size_t chars_added = rtc::SafeMin(length, buffer_.size() - size_ - 1);
+  memcpy(&buffer_[size_], str, chars_added);
+  size_ += chars_added;
+  buffer_[size_] = '\0';
   RTC_DCHECK(IsConsistent());
   return *this;
 }
diff --git a/rtc_base/strings/string_builder.h b/rtc_base/strings/string_builder.h
index 7c45ac4..918271b 100644
--- a/rtc_base/strings/string_builder.h
+++ b/rtc_base/strings/string_builder.h
@@ -18,6 +18,8 @@
 #include "absl/strings/string_view.h"
 #include "api/array_view.h"
 #include "rtc_base/string_encode.h"
+// TODO(nisse): Delete, as as soon as downstream applications are updated to not
+// rely in this indirect include.
 #include "rtc_base/string_utils.h"
 
 namespace rtc {
@@ -64,7 +66,7 @@
 
   // An alternate way from operator<<() to append a string. This variant is
   // slightly more efficient when the length of the string to append, is known.
-  SimpleStringBuilder& Append(const char* str, size_t length = SIZE_UNKNOWN);
+  SimpleStringBuilder& Append(const char* str, size_t length);
 
  private:
   bool IsConsistent() const {
diff --git a/sdk/android/native_unittests/stacktrace/stacktrace_unittest.cc b/sdk/android/native_unittests/stacktrace/stacktrace_unittest.cc
index 4ea3c9f..917dbc9 100644
--- a/sdk/android/native_unittests/stacktrace/stacktrace_unittest.cc
+++ b/sdk/android/native_unittests/stacktrace/stacktrace_unittest.cc
@@ -19,6 +19,7 @@
 #include "rtc_base/event.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/platform_thread.h"
+#include "rtc_base/string_utils.h"
 #include "rtc_base/strings/string_builder.h"
 #include "rtc_base/system/inline.h"
 #include "system_wrappers/include/sleep.h"
diff --git a/test/logging/log_writer.h b/test/logging/log_writer.h
index 9879eaa..db4a737 100644
--- a/test/logging/log_writer.h
+++ b/test/logging/log_writer.h
@@ -10,6 +10,7 @@
 #ifndef TEST_LOGGING_LOG_WRITER_H_
 #define TEST_LOGGING_LOG_WRITER_H_
 
+#include <stdarg.h>
 #include <memory>
 #include <string>
 #include <utility>