File tree 2 files changed +8
-1
lines changed
2 files changed +8
-1
lines changed Original file line number Diff line number Diff line change @@ -897,12 +897,12 @@ impl<'a> Parser<'a> {
897
897
898
898
/// Parse a new expression.
899
899
pub fn parse_expr ( & mut self ) -> Result < Expr , ParserError > {
900
- let _guard = self . recursion_counter . try_decrease ( ) ?;
901
900
self . parse_subexpr ( self . dialect . prec_unknown ( ) )
902
901
}
903
902
904
903
/// Parse tokens until the precedence changes.
905
904
pub fn parse_subexpr ( & mut self , precedence : u8 ) -> Result < Expr , ParserError > {
905
+ let _guard = self . recursion_counter . try_decrease ( ) ?;
906
906
debug ! ( "parsing expr" ) ;
907
907
let mut expr = self . parse_prefix ( ) ?;
908
908
debug ! ( "prefix: {:?}" , expr) ;
Original file line number Diff line number Diff line change @@ -8982,6 +8982,13 @@ fn parse_deeply_nested_parens_hits_recursion_limits() {
8982
8982
assert_eq ! ( ParserError :: RecursionLimitExceeded , res. unwrap_err( ) ) ;
8983
8983
}
8984
8984
8985
+ #[ test]
8986
+ fn parse_deeply_nested_unary_op_hits_recursion_limits ( ) {
8987
+ let sql = format ! ( "SELECT {}" , "+" . repeat( 1000 ) ) ;
8988
+ let res = parse_sql_statements ( & sql) ;
8989
+ assert_eq ! ( ParserError :: RecursionLimitExceeded , res. unwrap_err( ) ) ;
8990
+ }
8991
+
8985
8992
#[ test]
8986
8993
fn parse_deeply_nested_expr_hits_recursion_limits ( ) {
8987
8994
let dialect = GenericDialect { } ;
You can’t perform that action at this time.
0 commit comments