]> Repositorios git - scryer-prolog.git/commitdiff
Prevents panic in some strange cases. Seen in #721
authorAdrián Arroyo Calle <[email protected]>
Sun, 14 Nov 2021 23:17:40 +0000 (00:17 +0100)
committerAdrián Arroyo Calle <[email protected]>
Sun, 14 Nov 2021 23:17:40 +0000 (00:17 +0100)
crates/prolog_parser/src/parser.rs

index 364b021371a10ede11250db152c3928542c02733..43ee244cd9517c8a913eec9d4e48fa5e1aca9f79 100644 (file)
@@ -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| {