From: Adrián Arroyo Calle Date: Sun, 14 Nov 2021 23:17:40 +0000 (+0100) Subject: Prevents panic in some strange cases. Seen in #721 X-Git-Tag: v0.9.0~19^2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=387732d2f974cf1159e019418240eb864d875dcf;p=scryer-prolog.git Prevents panic in some strange cases. Seen in #721 --- 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| {