Skip to content

Commit

Permalink
Merge pull request #687 from tomtau/fix/fuzz-crash
Browse files Browse the repository at this point in the history
fix: not clear queue when exceeding a call limit
  • Loading branch information
CAD97 committed Aug 13, 2022
2 parents 23bd5e2 + 10fe82a commit b6c482e
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 1 deletion.
1 change: 1 addition & 0 deletions meta/resources/test/fuzzsample4.grammar
@@ -0,0 +1 @@
f={f{/*/*6/*6/*6/*5/*6*6/*6/*6/*5/*7//*
7 changes: 7 additions & 0 deletions meta/src/parser.rs
Expand Up @@ -1518,6 +1518,10 @@ mod tests {
env!("CARGO_MANIFEST_DIR"),
"/resources/test/fuzzsample3.grammar"
));
let sample4 = include_str!(concat!(
env!("CARGO_MANIFEST_DIR"),
"/resources/test/fuzzsample4.grammar"
));
const ERROR: &str = "call limit reached";
pest::set_call_limit(Some(25_000usize.try_into().unwrap()));
let s1 = crate::parser::parse(crate::parser::Rule::grammar_rules, sample1);
Expand All @@ -1529,5 +1533,8 @@ mod tests {
let s3 = crate::parser::parse(crate::parser::Rule::grammar_rules, sample3);
assert!(s3.is_err());
assert_eq!(s3.unwrap_err().variant.message(), ERROR);
let s4 = crate::parser::parse(crate::parser::Rule::grammar_rules, sample4);
assert!(s4.is_err());
assert_eq!(s4.unwrap_err().variant.message(), ERROR);
}
}
1 change: 0 additions & 1 deletion pest/src/parser_state.rs
Expand Up @@ -228,7 +228,6 @@ impl<'i, R: RuleType> ParserState<'i, R> {
#[inline]
fn inc_call_check_limit(mut self: Box<Self>) -> ParseResult<Box<Self>> {
if self.call_tracker.limit_reached() {
self.queue.clear();
return Err(self);
}
self.call_tracker.increment_depth();
Expand Down

0 comments on commit b6c482e

Please sign in to comment.