diff options
author | Nathan Scott <nathans@redhat.com> | 2020-12-22 16:55:11 +1100 |
---|---|---|
committer | Nathan Scott <nathans@redhat.com> | 2020-12-22 16:55:11 +1100 |
commit | fc7aead36bdee9d23b68eec277c2721aea793581 (patch) | |
tree | 65e8893aab4165c51fd7e7459476aae84da9b74a | |
parent | 737cd6167ace671e488af6af0f3ef011e899cdde (diff) | |
parent | 6502b026664a8a53fceff16f52981b43fe73cd2b (diff) |
Merge branch 'harden_makecommandstr' of https://github.com/BenBE/htop into BenBE-harden_makecommandstr
-rw-r--r-- | linux/LinuxProcess.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/linux/LinuxProcess.c b/linux/LinuxProcess.c index 18679ff7..802e7225 100644 --- a/linux/LinuxProcess.c +++ b/linux/LinuxProcess.c @@ -368,6 +368,16 @@ void LinuxProcess_makeCommandStr(Process* this) { char *str = strStart; int cmdlineBasenameOffset = lp->procCmdlineBasenameOffset; + int cmdlineBasenameEnd = lp->procCmdlineBasenameEnd; + + if (!cmdline) { + cmdlineBasenameOffset = 0; + cmdlineBasenameEnd = 0; + cmdline = "(zombie)"; + } + + assert(cmdlineBasenameOffset >= 0); + assert(cmdlineBasenameOffset <= strlen(cmdline)); if (!showMergedCommand || !procExe || !procComm) { /* fall back to cmdline */ if (showMergedCommand && !procExe && procComm && strlen(procComm)) { /* Prefix column with comm */ @@ -385,11 +395,11 @@ void LinuxProcess_makeCommandStr(Process* this) { if (showProgramPath) { (void) stpcpyWithNewlineConversion(str, cmdline); mc->baseStart = cmdlineBasenameOffset; - mc->baseEnd = lp->procCmdlineBasenameEnd; + mc->baseEnd = cmdlineBasenameEnd; } else { (void) stpcpyWithNewlineConversion(str, cmdline + cmdlineBasenameOffset); mc->baseStart = 0; - mc->baseEnd = lp->procCmdlineBasenameEnd - cmdlineBasenameOffset; + mc->baseEnd = cmdlineBasenameEnd - cmdlineBasenameOffset; } if (mc->sep1) { @@ -404,6 +414,9 @@ void LinuxProcess_makeCommandStr(Process* this) { int exeBasenameOffset = lp->procExeBasenameOffset; int exeBasenameLen = exeLen - exeBasenameOffset; + assert(exeBasenameOffset >= 0); + assert(exeBasenameOffset <= strlen(procExe)); + /* Start with copying exe */ if (showProgramPath) { str = stpcpy(str, procExe); |