Skip to content
This repository was archived by the owner on Jan 27, 2026. It is now read-only.

Commit fcca043

Browse files
committed
Fix for static analysis issues
Below are the issues fixed: - Memory - illegal accesses - Uninitialized variables - Memory - corruptions - Resource leak Tracked-On: OAM-122692 Signed-off-by: Sapna <sapna1.singh@intel.com>
1 parent b95a14b commit fcca043

1 file changed

Lines changed: 43 additions & 13 deletions

File tree

android/perfetto/sdk-v29.0/perfetto.cc

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5941,10 +5941,9 @@ std::string StripChars(const std::string& str,
59415941
const std::string& chars,
59425942
char replacement) {
59435943
std::string res(str);
5944-
const char* start = res.c_str();
59455944
const char* remove = chars.c_str();
5946-
for (const char* c = strpbrk(start, remove); c; c = strpbrk(c + 1, remove))
5947-
res[static_cast<uintptr_t>(c - start)] = replacement;
5945+
for (size_t pos = res.find_first_of(remove); pos != std::string::npos; pos = res.find_first_of(remove, pos + 1))
5946+
res[pos] = replacement;
59485947
return res;
59495948
}
59505949

@@ -8806,17 +8805,35 @@ void __attribute__((noreturn)) ChildProcess(ChildProcessArgs* args) {
88068805
close(args->stdin_pipe_rd);
88078806
break;
88088807
case Subprocess::InputMode::kDevNull:
8809-
if (dup2(open("/dev/null", O_RDONLY), STDIN_FILENO) == -1)
8810-
die("Failed to dup2(STDOUT)");
8808+
int fd = open("/dev/null", O_RDONLY);
8809+
if (fd == -1) {
8810+
die("Failed to open /dev/null");
8811+
}
8812+
8813+
if (dup2(fd, STDIN_FILENO) == -1) {
8814+
close(fd);
8815+
die("Failed to dup2(STDIN)");
8816+
}
8817+
8818+
close(fd);
88118819
break;
88128820
}
88138821

88148822
switch (args->create_args->stdout_mode) {
88158823
case Subprocess::OutputMode::kInherit:
88168824
break;
88178825
case Subprocess::OutputMode::kDevNull: {
8818-
if (dup2(open("/dev/null", O_RDWR), STDOUT_FILENO) == -1)
8819-
die("Failed to dup2(STDOUT)");
8826+
int fd = open("/dev/null", O_RDWR);
8827+
if (fd == -1) {
8828+
die("Failed to open /dev/null");
8829+
}
8830+
8831+
if (dup2(fd, STDOUT_FILENO) == -1) {
8832+
close(fd);
8833+
die("Failed to dup2(STDOUT)");
8834+
}
8835+
8836+
close(fd);
88208837
break;
88218838
}
88228839
case Subprocess::OutputMode::kBuffer:
@@ -8833,8 +8850,17 @@ void __attribute__((noreturn)) ChildProcess(ChildProcessArgs* args) {
88338850
case Subprocess::OutputMode::kInherit:
88348851
break;
88358852
case Subprocess::OutputMode::kDevNull: {
8836-
if (dup2(open("/dev/null", O_RDWR), STDERR_FILENO) == -1)
8837-
die("Failed to dup2(STDERR)");
8853+
int fd = open("/dev/null", O_RDWR);
8854+
if (fd == -1) {
8855+
die("Failed to open /dev/null");
8856+
}
8857+
8858+
if (dup2(fd, STDERR_FILENO) == -1) {
8859+
close(fd);
8860+
die("Failed to dup2(STDERR)");
8861+
}
8862+
8863+
close(fd);
88388864
break;
88398865
}
88408866
case Subprocess::OutputMode::kBuffer:
@@ -9123,7 +9149,7 @@ void Subprocess::TryPushStdin() {
91239149
void Subprocess::TryReadStdoutAndErr() {
91249150
if (!s_->stdouterr_pipe.rd)
91259151
return;
9126-
char buf[4096];
9152+
char buf[4096] = {};
91279153
int64_t rsize =
91289154
PERFETTO_EINTR(read(*s_->stdouterr_pipe.rd, buf, sizeof(buf)));
91299155
if (rsize < 0 && errno == EAGAIN)
@@ -46264,8 +46290,8 @@ void TracingMuxerImpl::Shutdown() {
4626446290
PERFETTO_CHECK(!muxer->task_runner_->RunsTasksOnCurrentThread());
4626546291
muxer->DestroyStoppedTraceWritersForCurrentThread();
4626646292

46267-
std::unique_ptr<base::TaskRunner> owned_task_runner(
46268-
muxer->task_runner_.get());
46293+
std::unique_ptr<base::TaskRunner> owned_task_runner =
46294+
std::move(muxer->task_runner_);
4626946295
base::WaitableEvent shutdown_done;
4627046296
owned_task_runner->PostTask([muxer, &shutdown_done] {
4627146297
// Check that no consumer session is currently active on any backend.
@@ -51698,6 +51724,7 @@ void TraceBuffer::CopyChunkUntrusted(ProducerID producer_id_trusted,
5169851724
record.writer_id = writer_id;
5169951725
record.num_fragments = num_fragments;
5170051726
record.flags = chunk_flags;
51727+
record.unused_flag = 0;
5170151728
ChunkMeta::Key key(record);
5170251729

5170351730
// Check whether we have already copied the same chunk previously. This may
@@ -51951,6 +51978,7 @@ void TraceBuffer::AddPaddingRecord(size_t size) {
5195151978
PERFETTO_DCHECK(size >= sizeof(ChunkRecord) && size <= ChunkRecord::kMaxSize);
5195251979
ChunkRecord record(size);
5195351980
record.is_padding = 1;
51981+
record.unused_flag = 0;
5195451982
TRACE_BUFFER_DLOG("AddPaddingRecord @ [%lu - %lu] %zu", wptr_ - begin(),
5195551983
uintptr_t(wptr_ - begin()) + size, size);
5195651984
WriteChunkRecord(wptr_, record, nullptr, size - sizeof(ChunkRecord));
@@ -52028,6 +52056,7 @@ TraceBuffer::SequenceIterator TraceBuffer::GetReadIterForSequence(
5202852056
iter.seq_begin = seq_begin;
5202952057
if (seq_begin == index_.end()) {
5203052058
iter.cur = iter.seq_end = index_.end();
52059+
iter.wrapping_id = 0;
5203152060
return iter;
5203252061
}
5203352062

@@ -72184,12 +72213,13 @@ void HostImpl::OnNewIncomingConnection(
7218472213
PERFETTO_DCHECK_THREAD(thread_checker_);
7218572214
std::unique_ptr<ClientConnection> client(new ClientConnection());
7218672215
ClientID client_id = ++last_client_id_;
72187-
clients_by_socket_[new_conn.get()] = client.get();
7218872216
client->id = client_id;
7218972217
client->sock = std::move(new_conn);
7219072218
// Watchdog is 30 seconds, so set the socket timeout to 10 seconds.
7219172219
client->sock->SetTxTimeout(10000);
72220+
// Move client into clients_ first, then use the raw pointer for clients_by_socket_
7219272221
clients_[client_id] = std::move(client);
72222+
clients_by_socket_[clients_[client_id]->sock.get()] = clients_[client_id].get();
7219372223
}
7219472224

7219572225
void HostImpl::OnDataAvailable(base::UnixSocket* sock) {

0 commit comments

Comments
 (0)