lexer: Properly initialize lexer->prog when lex_get_line_raw() fails.
authorBen Pfaff <blp@cs.stanford.edu>
Tue, 28 Sep 2010 01:51:22 +0000 (18:51 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Tue, 28 Sep 2010 01:51:22 +0000 (18:51 -0700)
lex_get_line(), the main caller of lex_get_line_raw(), set lexer->prog to
NULL when reading failed, but other callers need to do the same thing too,
otherwise e.g. DO REPEAT accesses invalid storage when there is a missing
END REPEAT.

Bug #31016.

src/language/lexer/lexer.c

index aa681c80306b65f0cfb7f2c72f3edfae479ccead..87fecaa6a92a8281b17df37ada52f7c9addb33fa 100644 (file)
@@ -862,6 +862,8 @@ lex_get_line_raw (struct lexer *lexer)
       const char *line = ds_cstr (&lexer->line_buffer);
       text_item_submit (text_item_create (TEXT_ITEM_SYNTAX, line));
     }
+  else
+    lexer->prog = NULL;
   return ok;
 }
 
@@ -874,10 +876,7 @@ lex_get_line (struct lexer *lexer)
   bool line_starts_command;
 
   if (!lex_get_line_raw (lexer))
-    {
-      lexer->prog = NULL;
-      return false;
-    }
+    return false;
 
   lex_preprocess_line (&lexer->line_buffer,
                       lex_current_syntax_mode (lexer),