Don't leak memory when displaying help.
Right now, we'll leak memory when we display a help topic because we don't free t, s, d that we've just used when breaking out of the loop. NB: coverity just reported t, but s and d also leak. CID: 1007776
This commit is contained in:
parent
1065f77afb
commit
74ecc44117
@ -91,10 +91,8 @@ help_getnext(int fd, char **topic, char **subtopic, char **desc)
|
|||||||
cp = ep;
|
cp = ep;
|
||||||
}
|
}
|
||||||
if (*topic == NULL) {
|
if (*topic == NULL) {
|
||||||
if (*subtopic != NULL)
|
free(*subtopic);
|
||||||
free(*subtopic);
|
free(*desc);
|
||||||
if (*desc != NULL)
|
|
||||||
free(*desc);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
return(1);
|
return(1);
|
||||||
@ -169,7 +167,7 @@ command_help(int argc, char *argv[])
|
|||||||
|
|
||||||
} else if (strcmp(topic, t)) {
|
} else if (strcmp(topic, t)) {
|
||||||
/* topic mismatch */
|
/* topic mismatch */
|
||||||
if(matched) /* nothing more on this topic, stop scanning */
|
if (matched) /* nothing more on this topic, stop scanning */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -178,7 +176,7 @@ command_help(int argc, char *argv[])
|
|||||||
if (((subtopic == NULL) && (s == NULL)) ||
|
if (((subtopic == NULL) && (s == NULL)) ||
|
||||||
((subtopic != NULL) && (s != NULL) && !strcmp(subtopic, s))) {
|
((subtopic != NULL) && (s != NULL) && !strcmp(subtopic, s))) {
|
||||||
/* exact match, print text */
|
/* exact match, print text */
|
||||||
while((fgetstr(buf, 80, hfd) >= 0) && (buf[0] != '#')) {
|
while ((fgetstr(buf, 80, hfd) >= 0) && (buf[0] != '#')) {
|
||||||
if (pager_output(buf))
|
if (pager_output(buf))
|
||||||
break;
|
break;
|
||||||
if (pager_output("\n"))
|
if (pager_output("\n"))
|
||||||
@ -193,24 +191,25 @@ command_help(int argc, char *argv[])
|
|||||||
free(t);
|
free(t);
|
||||||
free(s);
|
free(s);
|
||||||
free(d);
|
free(d);
|
||||||
|
t = s = d = NULL;
|
||||||
}
|
}
|
||||||
|
free(t);
|
||||||
|
free(s);
|
||||||
|
free(d);
|
||||||
pager_close();
|
pager_close();
|
||||||
close(hfd);
|
close(hfd);
|
||||||
if (!matched) {
|
if (!matched) {
|
||||||
snprintf(command_errbuf, sizeof(command_errbuf),
|
snprintf(command_errbuf, sizeof(command_errbuf),
|
||||||
"no help available for '%s'", topic);
|
"no help available for '%s'", topic);
|
||||||
free(topic);
|
free(topic);
|
||||||
if (subtopic)
|
free(subtopic);
|
||||||
free(subtopic);
|
|
||||||
return(CMD_ERROR);
|
return(CMD_ERROR);
|
||||||
}
|
}
|
||||||
free(topic);
|
free(topic);
|
||||||
if (subtopic)
|
free(subtopic);
|
||||||
free(subtopic);
|
|
||||||
return(CMD_OK);
|
return(CMD_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
COMMAND_SET(commandlist, "?", "list commands", command_commandlist);
|
COMMAND_SET(commandlist, "?", "list commands", command_commandlist);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user