From 79eea88e0403bd04b797299f403ce775fa4a1448 Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Wed, 2 Dec 2015 21:14:39 -0800 Subject: [PATCH] Avoid crashing when the user types a mismatched }. --- Scanner.lpp.in | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Scanner.lpp.in b/Scanner.lpp.in index e56b547..6300e30 100644 --- a/Scanner.lpp.in +++ b/Scanner.lpp.in @@ -52,6 +52,12 @@ typedef cy::parser::token tk; return value; \ } while (false) +#define S(stack) do { \ + if (yyextra->stack.size() == 1) \ + E("invalid brace") \ + yyextra->stack.pop(); \ +} while (false) + #define P yyextra->pool_ #define A new(P) #define Y P.strmemdup(yytext, yyleng) @@ -394,7 +400,7 @@ XMLName {XMLNameStart}{XMLNamePart}* ")" L F(tk::CloseParen, hi::Structure); "{" L yyextra->template_.push(false); F(yyextra->newline_ ? tk::OpenBrace_ : tk::OpenBrace, hi::Structure); -"}" L yyextra->template_.pop(); F(tk::CloseBrace, hi::Structure); +"}" L S(template_); F(tk::CloseBrace, hi::Structure); "[" L F(tk::OpenBracket, hi::Structure); "]" L F(tk::CloseBracket, hi::Structure); @@ -576,7 +582,7 @@ XMLName {XMLNameStart}{XMLNamePart}* /* }}} */ /* Template {{{ */ "`" L yyextra->tail_ = false; CYLexBufferStart(StrictAccentString); -"}" L yyextra->tail_ = true; yyextra->template_.pop(); CYLexBufferStart(StrictAccentString); +"}" L yyextra->tail_ = true; S(template_); CYLexBufferStart(StrictAccentString); { "`" R CYLexBufferEnd(string, String, yyextra->tail_ ? tk::TemplateTail : tk::NoSubstitutionTemplate, hi::Constant); -- 2.47.2