]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2009-06-15 Vladimir Serbinenko <phcoder@gmail.com>
authorphcoder <phcoder@localhost>
Mon, 15 Jun 2009 21:05:50 +0000 (21:05 +0000)
committerphcoder <phcoder@localhost>
Mon, 15 Jun 2009 21:05:50 +0000 (21:05 +0000)
Fix handling of string like \"hello\" and "a
b"

* script/sh/lexer.c (check_textstate): accept GRUB_PARSER_STATE_ESC
(grub_script_yylex): fix parsing of quoting, escaping and newline

script/sh/lexer.c

index d3577d44cb84e8af0211ba4d6c05e0e7b068bb92..47939c96d2e6a2d00b1c1b7bd5f408418684382a 100644 (file)
@@ -185,11 +185,18 @@ grub_script_yylex (union YYSTYPE *yylval, struct grub_parser_param *parsestate)
                break;
              grub_dprintf ("scripting", "token=`\\n'\n");
              recordchar (state, '\n');
-             if (state->state != GRUB_PARSER_STATE_ESC)
+             if (state->state != GRUB_PARSER_STATE_ESC
+                 && state->state != GRUB_PARSER_STATE_DQUOTE
+                 && state->state != GRUB_PARSER_STATE_QUOTE)
                {
                  state->tokenonhold = '\n';
                  break;
                }
+             if (state->state == GRUB_PARSER_STATE_DQUOTE
+                 || state->state == GRUB_PARSER_STATE_QUOTE)
+               yylval->arg = grub_script_arg_add (parsestate, yylval->arg,
+                                                  GRUB_SCRIPT_ARG_TYPE_STR,
+                                                  "\n");
            }
          else
            {