From 387732d2f974cf1159e019418240eb864d875dcf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Adri=C3=A1n=20Arroyo=20Calle?= Date: Mon, 15 Nov 2021 00:17:40 +0100 Subject: [PATCH] Prevents panic in some strange cases. Seen in #721 --- crates/prolog_parser/src/parser.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/crates/prolog_parser/src/parser.rs b/crates/prolog_parser/src/parser.rs index 364b0213..43ee244c 100644 --- a/crates/prolog_parser/src/parser.rs +++ b/crates/prolog_parser/src/parser.rs @@ -481,6 +481,10 @@ impl<'a, R: Read> Parser<'a, R> { return false; } + if self.terms.len() < 1 + arity { + return false; + } + let stack_len = self.stack.len() - 2 * arity - 1; let idx = self.terms.len() - arity; @@ -638,6 +642,13 @@ impl<'a, R: Read> Parser<'a, R> { term }; + if arity > self.terms.len() { + return Err(ParserError::IncompleteReduction( + self.lexer.line_num, + self.lexer.col_num + )) + } + let idx = self.terms.len() - arity; let list = self.terms.drain(idx..).rev().fold(end_term, |acc, t| { -- 2.54.0