From: Rico Tzschichholz Date: Sat, 18 Jan 2020 19:03:37 +0000 (+0100) Subject: parser: Make parse_argument_list/parse_initializer more robust X-Git-Tag: 0.47.4~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2517adbe43d77b7afe94e4c581996ad07b4c3e4e;p=thirdparty%2Fvala.git parser: Make parse_argument_list/parse_initializer more robust ... when --keep-going was passed or the input appears to be incomplete --- diff --git a/vala/valaparser.vala b/vala/valaparser.vala index fd2b31ad2..aaae5a25a 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -579,7 +579,18 @@ public class Vala.Parser : CodeVisitor { var list = new ArrayList (); if (current () != TokenType.CLOSE_PARENS) { do { - list.add (parse_argument ()); + try { + list.add (parse_argument ()); + } catch (ParseError e) { + if (current () == TokenType.CLOSE_PARENS) { + prev (); + report_parse_error (new ParseError.SYNTAX ("incomplete argument list")); + } else if (context.keep_going) { + report_parse_error (e); + } else { + throw e; + } + } } while (accept (TokenType.COMMA)); } expect (TokenType.CLOSE_PARENS); @@ -2732,7 +2743,18 @@ public class Vala.Parser : CodeVisitor { expect (TokenType.OPEN_BRACE); var initializer = new InitializerList (get_src (begin)); while (current () != TokenType.CLOSE_BRACE) { - initializer.append (parse_argument ()); + try { + initializer.append (parse_argument ()); + } catch (ParseError e) { + if (current () == TokenType.CLOSE_BRACE) { + prev (); + report_parse_error (new ParseError.SYNTAX ("incomplete initializer")); + } else if (context.keep_going) { + report_parse_error (e); + } else { + throw e; + } + } if (!accept (TokenType.COMMA)) { break;