diff --git a/Process.c b/Process.c index b2eb5a01..a70d391c 100644 --- a/Process.c +++ b/Process.c @@ -1161,7 +1161,7 @@ static int skipPotentialPath(const char* cmdline, int end) { void Process_updateCmdline(Process* this, const char* cmdline, int basenameStart, int basenameEnd) { assert(basenameStart >= 0); assert((cmdline && basenameStart < (int)strlen(cmdline)) || (!cmdline && basenameStart == 0)); - assert(basenameEnd >= 0); + assert((basenameEnd > basenameStart) || (basenameEnd == 0 && basenameStart == 0)); assert((cmdline && basenameEnd <= (int)strlen(cmdline)) || (!cmdline && basenameEnd == 0)); if (!this->cmdline && !cmdline) diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c index e262ce7c..b89b76dd 100644 --- a/linux/LinuxProcessList.c +++ b/linux/LinuxProcessList.c @@ -1123,6 +1123,13 @@ static bool LinuxProcessList_readCmdlineFile(Process* process, openat_arg_t proc } } } + + /* Some command lines are hard to parse, like + * file.so [kdeinit5] file local:/run/user/1000/klauncherdqbouY.1.slave-socket local:/run/user/1000/kded5TwsDAx.1.slave-socket + * Reset if start is behind end. + */ + if (tokenStart >= tokenEnd) + tokenStart = tokenEnd = 0; } if (tokenEnd == 0) {