From 2517adbe43d77b7afe94e4c581996ad07b4c3e4e Mon Sep 17 00:00:00 2001 From: Rico Tzschichholz Date: Sat, 18 Jan 2020 20:03:37 +0100 Subject: [PATCH] parser: Make parse_argument_list/parse_initializer more robust ... when --keep-going was passed or the input appears to be incomplete --- vala/valaparser.vala | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) 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; -- 2.47.2