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>