diff --git a/ChangeLog b/ChangeLog index 42ec9fe2..8288d775 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 1999-07-15 Paul D. Smith + * read.c (read_makefile): Fix some potential memory stomps parsing + `define' directives where no variable name is given. + * function.c (func_apply): Various code cleanup and tightening. (function_table): Add "apply" as a valid builtin function. @@ -7,6 +10,11 @@ * NEWS: Announce it. +1999-07-09 Eli Zaretskii + + * variable.c (try_variable_definition) [__MSDOS__, WINDOWS32]: + Treat "override SHELL=" the same as just "SHELL=". + 1999-07-09 Paul D. Smith * job.c (start_waiting_job): Don't get a second job token if we diff --git a/read.c b/read.c index 3cbd3925..4ac9745b 100644 --- a/read.c +++ b/read.c @@ -530,6 +530,9 @@ read_makefile (filename, flags) else { p2 = next_token (p + 6); + if (*p2 == '\0') + fatal (&fileinfo, "empty variable name"); + /* Let the variable name be the whole rest of the line, with trailing blanks stripped (comments have already been removed), so it could be a complex variable/function @@ -545,7 +548,7 @@ read_makefile (filename, flags) if (word1eq ("override", 8)) { p2 = next_token (p + 8); - if (p2 == 0) + if (*p2 == '\0') error (&fileinfo, "empty `override' directive"); if (!strncmp (p2, "define", 6) && (isblank (p2[6]) || p2[6] == '\0')) { @@ -554,6 +557,9 @@ read_makefile (filename, flags) else { p2 = next_token (p2 + 6); + if (*p2 == '\0') + fatal (&fileinfo, "empty variable name"); + /* Let the variable name be the whole rest of the line, with trailing blanks stripped (comments have already been removed), so it could be a complex variable/function @@ -566,7 +572,7 @@ read_makefile (filename, flags) } else if (!ignoring && !try_variable_definition (&fileinfo, p2, o_override)) - error (&fileinfo, "empty `override' directive"); + error (&fileinfo, "invalid `override' directive"); continue; } diff --git a/variable.c b/variable.c index 4537023a..2d4fa4df 100644 --- a/variable.c +++ b/variable.c @@ -850,7 +850,7 @@ try_variable_definition (flocp, line, origin) you have bash.exe installed as d:/unix/bash.exe, and d:/unix is on your $PATH, then SHELL=/usr/local/bin/bash will have the effect of defining SHELL to be "d:/unix/bash.exe". */ - if (origin == o_file + if ((origin == o_file || origin == o_override) && strcmp (expanded_name, "SHELL") == 0) { char shellpath[PATH_MAX]; @@ -918,7 +918,7 @@ try_variable_definition (flocp, line, origin) else #endif /* __MSDOS__ */ #ifdef WINDOWS32 - if (origin == o_file + if ((origin == o_file || origin == o_override) && strcmp (expanded_name, "SHELL") == 0) { extern char* default_shell;