summaryrefslogtreecommitdiffstats
path: root/contrib/bmake
diff options
context:
space:
mode:
authorsjg <sjg@FreeBSD.org>2013-06-18 19:35:51 +0000
committersjg <sjg@FreeBSD.org>2013-06-18 19:35:51 +0000
commit8bd3e4dfa2f3b7667b339f1e4f2e24b025f4146b (patch)
treed30c43088a6cb1d4ecdd5d13662f958930a82eb6 /contrib/bmake
parent73d22f0befef5965b2e54777857b5929bcb38181 (diff)
downloadFreeBSD-src-8bd3e4dfa2f3b7667b339f1e4f2e24b025f4146b.zip
FreeBSD-src-8bd3e4dfa2f3b7667b339f1e4f2e24b025f4146b.tar.gz
Fix use after free bug.
Parse_SetInput: curFile->fname was using the buffer passed to it - which ReadMakefile frees. This change makes the comment in ParseEOF about leaking curFile->fname true.
Diffstat (limited to 'contrib/bmake')
-rw-r--r--contrib/bmake/parse.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/contrib/bmake/parse.c b/contrib/bmake/parse.c
index 14c868b..461a2cb 100644
--- a/contrib/bmake/parse.c
+++ b/contrib/bmake/parse.c
@@ -157,7 +157,7 @@ __RCSID("$NetBSD: parse.c,v 1.188 2013/03/22 16:07:59 sjg Exp $");
* Structure for a file being read ("included file")
*/
typedef struct IFile {
- const char *fname; /* name of file */
+ char *fname; /* name of file */
int lineno; /* current line number in file */
int first_lineno; /* line number of start of text */
int cond_depth; /* 'if' nesting when file opened */
@@ -2344,7 +2344,7 @@ Parse_SetInput(const char *name, int line, int fd,
* name of the include file so error messages refer to the right
* place.
*/
- curFile->fname = name;
+ curFile->fname = bmake_strdup(name);
curFile->lineno = line;
curFile->first_lineno = line;
curFile->nextbuf = nextbuf;
@@ -2357,6 +2357,8 @@ Parse_SetInput(const char *name, int line, int fd,
buf = curFile->nextbuf(curFile->nextbuf_arg, &len);
if (buf == NULL) {
/* Was all a waste of time ... */
+ if (curFile->fname)
+ free(curFile->fname);
free(curFile);
return;
}
OpenPOWER on IntegriCloud