Fix sprintf usage in base/utils.cc
sprintf is deprecated with Xcode 14.
Change-Id: I53289c7ff3e827cc2da9e08ffd6fd56fdc8c34c0
diff --git a/src/base/logging_unittest.cc b/src/base/logging_unittest.cc
index 8335895..0ed0b7a 100644
--- a/src/base/logging_unittest.cc
+++ b/src/base/logging_unittest.cc
@@ -39,8 +39,8 @@
LogMessage(kLogDebug, "file.cc", 100, "test message %d", 1);
SetLogMessageCallback(+[](LogMessageCallbackArgs log) {
- sprintf(g_last_line, "%d:%s:%d:%s", log.level, log.filename, log.line,
- log.message);
+ base::SprintfTrunc(g_last_line, sizeof(g_last_line), "%d:%s:%d:%s",
+ log.level, log.filename, log.line, log.message);
});
g_last_line[0] = 0;
diff --git a/src/base/utils.cc b/src/base/utils.cc
index 0ec6cdf..e5b8951 100644
--- a/src/base/utils.cc
+++ b/src/base/utils.cc
@@ -21,6 +21,7 @@
#include "perfetto/base/build_config.h"
#include "perfetto/base/logging.h"
#include "perfetto/ext/base/file_utils.h"
+#include "perfetto/ext/base/string_utils.h"
#if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \
PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID) || \
@@ -283,9 +284,11 @@
std::unique_ptr<char[]> line(new char[bytes_per_line * 4 + 128]);
for (size_t i = 0; i < len; i += bytes_per_line) {
char* wptr = line.get();
- wptr += sprintf(wptr, "%08zX: ", i);
- for (size_t j = i; j < i + bytes_per_line && j < len; j++)
- wptr += sprintf(wptr, "%02X ", static_cast<unsigned>(data[j]) & 0xFF);
+ wptr += base::SprintfTrunc(wptr, 19, "%08zX: ", i);
+ for (size_t j = i; j < i + bytes_per_line && j < len; j++) {
+ wptr += base::SprintfTrunc(wptr, 4, "%02X ",
+ static_cast<unsigned>(data[j]) & 0xFF);
+ }
for (size_t j = static_cast<size_t>(wptr - line.get()); j < kPadding; ++j)
*(wptr++) = ' ';
for (size_t j = i; j < i + bytes_per_line && j < len; j++) {
diff --git a/src/trace_processor/rpc/rpc.cc b/src/trace_processor/rpc/rpc.cc
index 7b32610..cef8207 100644
--- a/src/trace_processor/rpc/rpc.cc
+++ b/src/trace_processor/rpc/rpc.cc
@@ -135,10 +135,10 @@
if (req.seq() != 0 && rx_seq_id_ != 0 && req.seq() != rx_seq_id_ + 1) {
char err_str[255];
// "(ERR:rpc_seq)" is intercepted by error_dialog.ts in the UI.
- sprintf(err_str,
- "RPC request out of order. Expected %" PRId64 ", got %" PRId64
- " (ERR:rpc_seq)",
- rx_seq_id_ + 1, req.seq());
+ snprintf(err_str, sizeof(err_str),
+ "RPC request out of order. Expected %" PRId64 ", got %" PRId64
+ " (ERR:rpc_seq)",
+ rx_seq_id_ + 1, req.seq());
PERFETTO_ELOG("%s", err_str);
protozero::HeapBuffered<TraceProcessorRpcStream> err_msg;
err_msg->add_msg()->set_fatal_error(err_str);
diff --git a/src/tracing/core/tracing_service_impl_unittest.cc b/src/tracing/core/tracing_service_impl_unittest.cc
index 00b7a3a..6ef6088 100644
--- a/src/tracing/core/tracing_service_impl_unittest.cc
+++ b/src/tracing/core/tracing_service_impl_unittest.cc
@@ -19,6 +19,7 @@
#include <string.h>
#include "perfetto/ext/base/file_utils.h"
+#include "perfetto/ext/base/string_utils.h"
#include "perfetto/ext/base/temp_file.h"
#include "perfetto/ext/base/utils.h"
#include "perfetto/ext/tracing/core/consumer.h"
@@ -2065,7 +2066,7 @@
{
auto tp = writer->NewTracePacket();
char payload[32];
- sprintf(payload, "f_%d", flushes_seen);
+ base::SprintfTrunc(payload, sizeof(payload), "f_%d", flushes_seen);
tp->set_for_testing()->set_str(payload);
}
writer->Flush();
diff --git a/src/tracing/test/tracing_integration_test.cc b/src/tracing/test/tracing_integration_test.cc
index d1ca340..51e225b 100644
--- a/src/tracing/test/tracing_integration_test.cc
+++ b/src/tracing/test/tracing_integration_test.cc
@@ -16,6 +16,7 @@
#include <cinttypes>
+#include "perfetto/ext/base/string_utils.h"
#include "perfetto/ext/base/temp_file.h"
#include "perfetto/ext/tracing/core/consumer.h"
#include "perfetto/ext/tracing/core/producer.h"
@@ -280,7 +281,7 @@
const size_t kNumPackets = 10;
for (size_t i = 0; i < kNumPackets; i++) {
char buf[16];
- sprintf(buf, "evt_%zu", i);
+ base::SprintfTrunc(buf, sizeof(buf), "evt_%zu", i);
writer->NewTracePacket()->set_for_testing()->set_str(buf, strlen(buf));
}
@@ -315,7 +316,7 @@
encoded_packet.GetRawBytesForTesting()));
if (packet.has_for_testing()) {
char buf[8];
- sprintf(buf, "evt_%zu", num_pack_rx++);
+ base::SprintfTrunc(buf, sizeof(buf), "evt_%zu", num_pack_rx++);
EXPECT_EQ(std::string(buf), packet.for_testing().str());
} else if (packet.has_clock_snapshot()) {
EXPECT_GE(packet.clock_snapshot().clocks_size(),
@@ -413,7 +414,7 @@
const size_t kNumPackets = 10;
for (size_t i = 0; i < kNumPackets; i++) {
char buf[16];
- sprintf(buf, "evt_%zu", i);
+ base::SprintfTrunc(buf, sizeof(buf), "evt_%zu", i);
writer->NewTracePacket()->set_for_testing()->set_str(buf, strlen(buf));
}
auto on_data_committed = task_runner_->CreateCheckpoint("on_data_committed");