Merge pull request #1096 from aarroyoc/number_chars_fix
Prevents panic in some strange cases. Seen in #721
This commit is contained in:
@@ -481,6 +481,10 @@ impl<'a, R: Read> Parser<'a, R> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.terms.len() < 1 + arity {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
let stack_len = self.stack.len() - 2 * arity - 1;
|
let stack_len = self.stack.len() - 2 * arity - 1;
|
||||||
let idx = self.terms.len() - arity;
|
let idx = self.terms.len() - arity;
|
||||||
|
|
||||||
@@ -638,6 +642,13 @@ impl<'a, R: Read> Parser<'a, R> {
|
|||||||
term
|
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 idx = self.terms.len() - arity;
|
||||||
|
|
||||||
let list = self.terms.drain(idx..).rev().fold(end_term, |acc, t| {
|
let list = self.terms.drain(idx..).rev().fold(end_term, |acc, t| {
|
||||||
|
|||||||
Reference in New Issue
Block a user