This is an automated email from the ASF dual-hosted git repository.

github-merge-queue[bot] pushed a commit to branch 
gh-readonly-queue/main/pr-2422-c4e7dc5c49e830dba172d23381061c602d8dfcdc
in repository https://gitbox.apache.org/repos/asf/datafusion-sqlparser-rs.git

commit 33521a534eae72188e06ce0ce4836d19c7f3458a
Author: Shuvam Kumar <[email protected]>
AuthorDate: Tue Aug 4 14:55:27 2026 +0530

    Add recursion checks for parse_interval (#2422)
    
    Co-authored-by: Claude Opus 5 <[email protected]>
---
 src/parser/mod.rs         |  3 +++
 tests/sqlparser_common.rs | 14 ++++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index 2d51d471..d2668d3b 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -3368,7 +3368,10 @@ impl<'a> Parser<'a> {
     /// ```
     ///
     /// Note that we do not currently attempt to parse the quoted value.
+    #[cfg_attr(feature = "recursive-protection", recursive::recursive)]
     pub fn parse_interval(&mut self) -> Result<Expr, ParserError> {
+        let _guard = self.recursion_counter.try_decrease()?;
+
         // The SQL standard allows an optional sign before the value string, 
but
         // it is not clear if any implementations support that syntax, so we
         // don't currently try to parse it. (The sign can instead be included
diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs
index bad08360..0800bc41 100644
--- a/tests/sqlparser_common.rs
+++ b/tests/sqlparser_common.rs
@@ -11419,6 +11419,20 @@ fn 
parse_deeply_nested_subquery_expr_hits_recursion_limits() {
     assert_eq!(res, Err(ParserError::RecursionLimitExceeded));
 }
 
+#[test]
+fn parse_deeply_nested_interval_hits_recursion_limits() {
+    let dialect = GenericDialect {};
+
+    let sql = format!("SELECT {}1", "INTERVAL ".repeat(1000));
+
+    let res = Parser::new(&dialect)
+        .try_with_sql(&sql)
+        .expect("tokenize to work")
+        .parse_statements();
+
+    assert_eq!(res, Err(ParserError::RecursionLimitExceeded));
+}
+
 #[test]
 fn parse_with_recursion_limit() {
     let dialect = GenericDialect {};


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to