diff options
author | Sam Mendoza-Jonas <sam@mendozajonas.com> | 2016-01-12 15:58:13 +1100 |
---|---|---|
committer | Sam Mendoza-Jonas <sam@mendozajonas.com> | 2016-02-09 13:39:50 +1100 |
commit | a1ec0710b6abad1a932d09f23010e3eb4662e8c9 (patch) | |
tree | 3ccc849f1f6c5027a31bb05361fabcab6f500be7 /discover | |
parent | e25641dc14753cc070ecf50e10809ce3ce8b9ecd (diff) | |
download | talos-petitboot-a1ec0710b6abad1a932d09f23010e3eb4662e8c9.tar.gz talos-petitboot-a1ec0710b6abad1a932d09f23010e3eb4662e8c9.zip |
discover/grub: Fix handling of empty strings
If "" or '' are used in a statement to omit a word, we must still
return a TOKEN_WORD for an empty string.
In particular this fixes an issue where Petitboot would fail to parse
the grub.cfg included in the Debian 8.2 install image, which includes a
menuentry statement with an empty name.
Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
Diffstat (limited to 'discover')
-rw-r--r-- | discover/grub2/grub2-lexer.l | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/discover/grub2/grub2-lexer.l b/discover/grub2/grub2-lexer.l index 52575e3..81dc5fe 100644 --- a/discover/grub2/grub2-lexer.l +++ b/discover/grub2/grub2-lexer.l @@ -23,6 +23,7 @@ void yyerror(struct grub2_parser *parser, const char *fmt, ...); WORD [^{}|&$;<> \t\n'"#]+ DELIM [ \t]+ +BLANK ["]{2}|[']{2} VARNAME ([[:alpha:]][_[:alnum:]]*|[0-9]|[\?@\*#]) %% @@ -52,6 +53,12 @@ VARNAME ([[:alpha:]][_[:alnum:]]*|[0-9]|[\?@\*#]) "until" return TOKEN_UTIL; "while" return TOKEN_WHILE; + /* ignore quoted empty strings */ +{BLANK} { + yylval->word = create_word_text(yyget_extra(yyscanner), ""); + yyget_extra(yyscanner)->inter_word = true; + return TOKEN_WORD; + } /* anything that's not a metachar: return as a plain word */ {WORD} { yylval->word = create_word_text(yyget_extra(yyscanner), yytext); |