diff options
author | Max Khon <fjoe@FreeBSD.org> | 2005-11-30 20:38:03 +0000 |
---|---|---|
committer | Max Khon <fjoe@FreeBSD.org> | 2005-11-30 20:38:03 +0000 |
commit | 7d81571413ca100305b778a1e6c6a1992dfe7515 (patch) | |
tree | f75a312081b6cefd6f373cc2f083927e1093552d /usr.bin | |
parent | f219c9d3d33babf9cb8d4ec26f284fa8155e3ac7 (diff) | |
download | src-7d81571413ca100305b778a1e6c6a1992dfe7515.tar.gz src-7d81571413ca100305b778a1e6c6a1992dfe7515.zip |
- match_var: do not address memory at invalid address (`len' can be greater
than strlen(var) + 1)
- ReadMakeFile: prevent `fname' memory leak
- ReadMakeFile: prevent double free (caused by double fclose) --
ParsePopInput() closes input file
Reviewed by: harti
Notes
Notes:
svn path=/head/; revision=152969
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/make/main.c | 6 | ||||
-rw-r--r-- | usr.bin/make/var.c | 2 |
2 files changed, 5 insertions, 3 deletions
diff --git a/usr.bin/make/main.c b/usr.bin/make/main.c index 4ee3a8957655..706829cab937 100644 --- a/usr.bin/make/main.c +++ b/usr.bin/make/main.c @@ -298,8 +298,10 @@ ReadMakefile(const char p[]) name = Path_FindFile(fname, &parseIncPath); if (!name) name = Path_FindFile(fname, &sysIncPath); - if (!name || !(stream = fopen(name, "r"))) + if (!name || !(stream = fopen(name, "r"))) { + free(fname); return (FALSE); + } MAKEFILE = fname = name; /* * set the MAKEFILE variable desired by System V fans -- the @@ -310,8 +312,8 @@ found: if (setMAKEFILE) Var_SetGlobal("MAKEFILE", MAKEFILE); Parse_File(fname, stream); - fclose(stream); } + free(fname); return (TRUE); } diff --git a/usr.bin/make/var.c b/usr.bin/make/var.c index 9844e1650050..ff1bf094dd3d 100644 --- a/usr.bin/make/var.c +++ b/usr.bin/make/var.c @@ -2246,7 +2246,7 @@ match_var(const char str[], const char var[]) str[0] == CLOSE_BRACE) { len = str - (start + 2); - if (var[len] == '\0' && strncmp(var, start + 2, len) == 0) { + if (strncmp(var, start + 2, len) == 0 && var[len] == '\0') { return (0); /* match */ } else { /* |