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");