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 @@ -8980,6 +8980,13 @@ fn parse_deeply_nested_parens_hits_recursion_limits() {
8980
8980
assert_eq ! ( ParserError :: RecursionLimitExceeded , res. unwrap_err( ) ) ;
8981
8981
}
8982
8982
8983
+ #[ test]
8984
+ fn parse_deeply_nested_unary_op_hits_recursion_limits ( ) {
8985
+ let sql = format ! ( "SELECT {}" , "+" . repeat( 1000 ) ) ;
8986
+ let res = parse_sql_statements ( & sql) ;
8987
+ assert_eq ! ( ParserError :: RecursionLimitExceeded , res. unwrap_err( ) ) ;
8988
+ }
8989
+
8983
8990
#[ test]
8984
8991
fn parse_deeply_nested_expr_hits_recursion_limits ( ) {
8985
8992
let dialect = GenericDialect { } ;
You can’t perform that action at this time.
0 commit comments