diff --git a/media/sctp/sctp_transport.cc b/media/sctp/sctp_transport.cc index b99a55b7f8..0858401c22 100644 --- a/media/sctp/sctp_transport.cc +++ b/media/sctp/sctp_transport.cc @@ -36,6 +36,7 @@ enum PreservedErrno { #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 0ef16ff9cb..6e2c85bf6f 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 645cc650cf..b6fca242ed 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 0c09fa2ae8..96be3b223f 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 0456eeaa1c..10cfb3a14e 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 73d763a92b..a204e527ce 100644 --- a/rtc_base/strings/string_builder.cc +++ b/rtc_base/strings/string_builder.cc @@ -26,7 +26,7 @@ SimpleStringBuilder::SimpleStringBuilder(rtc::ArrayView buffer) } 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::AppendFormat(const char* fmt, ...) { 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 7c45ac4ace..918271b628 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 @@ class SimpleStringBuilder { // 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 4ea3c9f376..917dbc972f 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 9879eaa0df..db4a7371d0 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 #include #include #include