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
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=328289
@ -91,10 +91,8 @@ help_getnext(int fd, char **topic, char **subtopic, char **desc)
|
||||
cp = ep;
|
||||
}
|
||||
if (*topic == NULL) {
|
||||
if (*subtopic != NULL)
|
||||
free(*subtopic);
|
||||
if (*desc != NULL)
|
||||
free(*desc);
|
||||
free(*subtopic);
|
||||
free(*desc);
|
||||
continue;
|
||||
}
|
||||
return(1);
|
||||
@ -169,7 +167,7 @@ command_help(int argc, char *argv[])
|
||||
|
||||
} else if (strcmp(topic, t)) {
|
||||
/* topic mismatch */
|
||||
if(matched) /* nothing more on this topic, stop scanning */
|
||||
if (matched) /* nothing more on this topic, stop scanning */
|
||||
break;
|
||||
|
||||
} else {
|
||||
@ -178,7 +176,7 @@ command_help(int argc, char *argv[])
|
||||
if (((subtopic == NULL) && (s == NULL)) ||
|
||||
((subtopic != NULL) && (s != NULL) && !strcmp(subtopic, s))) {
|
||||
/* exact match, print text */
|
||||
while((fgetstr(buf, 80, hfd) >= 0) && (buf[0] != '#')) {
|
||||
while ((fgetstr(buf, 80, hfd) >= 0) && (buf[0] != '#')) {
|
||||
if (pager_output(buf))
|
||||
break;
|
||||
if (pager_output("\n"))
|
||||
@ -193,24 +191,25 @@ command_help(int argc, char *argv[])
|
||||
free(t);
|
||||
free(s);
|
||||
free(d);
|
||||
t = s = d = NULL;
|
||||
}
|
||||
free(t);
|
||||
free(s);
|
||||
free(d);
|
||||
pager_close();
|
||||
close(hfd);
|
||||
if (!matched) {
|
||||
snprintf(command_errbuf, sizeof(command_errbuf),
|
||||
"no help available for '%s'", topic);
|
||||
free(topic);
|
||||
if (subtopic)
|
||||
free(subtopic);
|
||||
free(subtopic);
|
||||
return(CMD_ERROR);
|
||||
}
|
||||
free(topic);
|
||||
if (subtopic)
|
||||
free(subtopic);
|
||||
free(subtopic);
|
||||
return(CMD_OK);
|
||||
}
|
||||
|
||||
|
||||
COMMAND_SET(commandlist, "?", "list commands", command_commandlist);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user