From 2b09f29a1e2ca86595e7e8023ba6041c319491f2 Mon Sep 17 00:00:00 2001 From: Jos Dehaes Date: Fri, 2 Feb 2024 09:28:07 +0100 Subject: [PATCH] fix: don't mangle memory for zombie processes for a zombie process, `proc_pidpath` returns 0, and nothing is written in fullname, so it's uninitialized garbage --- src/osx/btop_collect.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/osx/btop_collect.cpp b/src/osx/btop_collect.cpp index 860e457e..68aa9610 100644 --- a/src/osx/btop_collect.cpp +++ b/src/osx/btop_collect.cpp @@ -1212,10 +1212,14 @@ namespace Proc { //? Get program name, command, username, parent pid, nice and status if (no_cache) { char fullname[PROC_PIDPATHINFO_MAXSIZE]; - proc_pidpath(pid, fullname, sizeof(fullname)); - const string f_name = std::string(fullname); - size_t lastSlash = f_name.find_last_of('/'); - new_proc.name = f_name.substr(lastSlash + 1); + int rc = proc_pidpath(pid, fullname, sizeof(fullname)); + string f_name = ""; + if (rc != 0) { + f_name = std::string(fullname); + size_t lastSlash = f_name.find_last_of('/'); + f_name = f_name.substr(lastSlash + 1); + } + new_proc.name = f_name; //? Get process arguments if possible, fallback to process path in case of failure if (Shared::arg_max > 0) { std::unique_ptr proc_chars(new char[Shared::arg_max]);