Add configurable recursion limit to parser, to protect against stack overflows (#764)

This commit is contained in:
Andrew Lamb 2022-12-28 08:29:51 -05:00 committed by GitHub
parent 2c20ec0be5
commit 79d0baad73
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 302 additions and 31 deletions

View file

@ -29,7 +29,6 @@ use core::fmt::Debug;
use crate::ast::*;
use crate::dialect::*;
use crate::parser::{Parser, ParserError};
use crate::tokenizer::Tokenizer;
/// Tests use the methods on this struct to invoke the parser on one or
/// multiple dialects.
@ -65,9 +64,8 @@ impl TestedDialects {
F: Fn(&mut Parser) -> T,
{
self.one_of_identical_results(|dialect| {
let mut tokenizer = Tokenizer::new(dialect, sql);
let tokens = tokenizer.tokenize().unwrap();
f(&mut Parser::new(tokens, dialect))
let mut parser = Parser::new(dialect).try_with_sql(sql).unwrap();
f(&mut parser)
})
}