From b3dd0168f123cd9161578dd359f34dab9355857c Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Thu, 15 May 2014 11:55:23 +0200 Subject: [PATCH] settings: Properly match } and # in include statements Found due to %option nodefault. A match for } was actually missing and # was not properly matched if it was part of an include statement on the last line of a file that did not end with a newline. --- src/libstrongswan/settings/settings_lexer.l | 22 +++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/libstrongswan/settings/settings_lexer.l b/src/libstrongswan/settings/settings_lexer.l index d9af1531d6..c6546f4643 100644 --- a/src/libstrongswan/settings/settings_lexer.l +++ b/src/libstrongswan/settings/settings_lexer.l @@ -82,12 +82,22 @@ static void include_files(parser_helper_t *ctx); { /* we allow all characters except #, } and spaces, they can be escaped */ <> | - \n|#.*\n | - [\t ] { - if (*yytext && yytext[strlen(yytext) - 1] == '\n') - { /* put the newline back to fix the line numbers */ - unput('\n'); - yy_set_bol(0); + [#}\n\t ] { + if (*yytext) + { + switch (yytext[0]) + { + case '\n': + /* put the newline back to fix the line numbers */ + unput('\n'); + yy_set_bol(0); + break; + case '#': + case '}': + /* these are parsed outside of this start condition */ + unput(yytext[0]); + break; + } } include_files(yyextra); yy_pop_state(yyscanner); -- 2.47.2