mirror of https://github.com/xzeldon/htop.git
Fix invalid access when highlighting basename of threads.
This commit is contained in:
parent
f2e4556b5e
commit
cb297af848
|
@ -405,14 +405,13 @@ static inline void Process_writeCommand(Process* this, int attr, int baseattr, R
|
||||||
RichString_append(str, attr, this->comm);
|
RichString_append(str, attr, this->comm);
|
||||||
if (this->pl->highlightBaseName) {
|
if (this->pl->highlightBaseName) {
|
||||||
int finish = RichString_size(str) - 1;
|
int finish = RichString_size(str) - 1;
|
||||||
int space = start + this->basenameOffset;
|
if (this->basenameOffset != -1)
|
||||||
if (space != -1)
|
finish = (start + this->basenameOffset) - 1;
|
||||||
finish = space - 1;
|
|
||||||
int colon = RichString_findChar(str, ':', start);
|
int colon = RichString_findChar(str, ':', start);
|
||||||
if (colon != -1 && colon < finish) {
|
if (colon != -1 && colon < finish) {
|
||||||
finish = colon;
|
finish = colon;
|
||||||
} else {
|
} else {
|
||||||
for (int i = finish - start; i > 0; i--) {
|
for (int i = finish - start; i >= 0; i--) {
|
||||||
if (this->comm[i] == '/') {
|
if (this->comm[i] == '/') {
|
||||||
start += i+1;
|
start += i+1;
|
||||||
break;
|
break;
|
||||||
|
@ -648,6 +647,7 @@ Process* Process_new(struct ProcessList_ *pl) {
|
||||||
this->utime = 0;
|
this->utime = 0;
|
||||||
this->stime = 0;
|
this->stime = 0;
|
||||||
this->comm = NULL;
|
this->comm = NULL;
|
||||||
|
this->basenameOffset = -1;
|
||||||
this->indent = 0;
|
this->indent = 0;
|
||||||
#ifdef HAVE_CGROUP
|
#ifdef HAVE_CGROUP
|
||||||
this->cgroup = NULL;
|
this->cgroup = NULL;
|
||||||
|
|
|
@ -708,10 +708,10 @@ static bool ProcessList_readCmdlineFile(Process* process, const char* dirname, c
|
||||||
if (tokenEnd == 0) {
|
if (tokenEnd == 0) {
|
||||||
tokenEnd = amtRead;
|
tokenEnd = amtRead;
|
||||||
}
|
}
|
||||||
process->basenameOffset = tokenEnd;
|
|
||||||
command[amtRead] = '\0';
|
command[amtRead] = '\0';
|
||||||
free(process->comm);
|
free(process->comm);
|
||||||
process->comm = strdup(command);
|
process->comm = strdup(command);
|
||||||
|
process->basenameOffset = tokenEnd;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -831,10 +831,12 @@ static bool ProcessList_processEntries(ProcessList* this, const char* dirname, P
|
||||||
|
|
||||||
if (process->state == 'Z') {
|
if (process->state == 'Z') {
|
||||||
free(process->comm);
|
free(process->comm);
|
||||||
|
process->basenameOffset = -1;
|
||||||
process->comm = strdup(command);
|
process->comm = strdup(command);
|
||||||
} else if (Process_isThread(process)) {
|
} else if (Process_isThread(process)) {
|
||||||
if (this->showThreadNames || Process_isKernelThread(process) || process->state == 'Z') {
|
if (this->showThreadNames || Process_isKernelThread(process) || process->state == 'Z') {
|
||||||
free(process->comm);
|
free(process->comm);
|
||||||
|
process->basenameOffset = -1;
|
||||||
process->comm = strdup(command);
|
process->comm = strdup(command);
|
||||||
} else if (this->showingThreadNames) {
|
} else if (this->showingThreadNames) {
|
||||||
if (! ProcessList_readCmdlineFile(process, dirname, name))
|
if (! ProcessList_readCmdlineFile(process, dirname, name))
|
||||||
|
@ -858,6 +860,7 @@ static bool ProcessList_processEntries(ProcessList* this, const char* dirname, P
|
||||||
errorReadingProcess: {
|
errorReadingProcess: {
|
||||||
if (process->comm) {
|
if (process->comm) {
|
||||||
free(process->comm);
|
free(process->comm);
|
||||||
|
process->basenameOffset = -1;
|
||||||
process->comm = NULL;
|
process->comm = NULL;
|
||||||
}
|
}
|
||||||
if (existingProcess)
|
if (existingProcess)
|
||||||
|
|
Loading…
Reference in New Issue