* Various bug fixes.
authorPaul Smith <psmith@gnu.org>
Fri, 16 Jul 1999 02:25:03 +0000 (02:25 +0000)
committerPaul Smith <psmith@gnu.org>
Fri, 16 Jul 1999 02:25:03 +0000 (02:25 +0000)
ChangeLog
read.c
variable.c

index 42ec9fe..8288d77 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 1999-07-15  Paul D. Smith  <psmith@gnu.org>
 
+       * 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  <eliz@is.elta.co.il>
+
+       * variable.c (try_variable_definition) [__MSDOS__, WINDOWS32]:
+       Treat "override SHELL=" the same as just "SHELL=".
+
 1999-07-09  Paul D. Smith  <psmith@gnu.org>
 
        * job.c (start_waiting_job): Don't get a second job token if we
diff --git a/read.c b/read.c
index 3cbd392..4ac9745 100644 (file)
--- 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;
        }
index 4537023..2d4fa4d 100644 (file)
@@ -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;