svn commit: r328289 - head/stand/common
Warner Losh
imp at FreeBSD.org
Tue Jan 23 18:01:30 UTC 2018
Author: imp
Date: Tue Jan 23 18:01:27 2018
New Revision: 328289
URL: https://svnweb.freebsd.org/changeset/base/328289
Log:
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
Modified:
head/stand/common/commands.c
Modified: head/stand/common/commands.c
==============================================================================
--- head/stand/common/commands.c Tue Jan 23 18:01:17 2018 (r328288)
+++ head/stand/common/commands.c Tue Jan 23 18:01:27 2018 (r328289)
@@ -91,10 +91,8 @@ help_getnext(int fd, char **topic, char **subtopic, ch
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,23 +191,24 @@ 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);
More information about the svn-src-all
mailing list