summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/ide/completion/sql_complete_ut.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'yql/essentials/sql/v1/ide/completion/sql_complete_ut.cpp')
-rw-r--r--yql/essentials/sql/v1/ide/completion/sql_complete_ut.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/yql/essentials/sql/v1/ide/completion/sql_complete_ut.cpp b/yql/essentials/sql/v1/ide/completion/sql_complete_ut.cpp
index 092f7803a5e..7f2e1511e3d 100644
--- a/yql/essentials/sql/v1/ide/completion/sql_complete_ut.cpp
+++ b/yql/essentials/sql/v1/ide/completion/sql_complete_ut.cpp
@@ -2401,4 +2401,23 @@ Y_UNIT_TEST(CachedSchema) {
}
}
+Y_UNIT_TEST(NoStackOverflowOnDeeplyNestedSubquery) {
+ constexpr size_t Depth = 4 * 1024;
+
+ auto engine = MakeSqlCompletionEngineUT();
+
+ TStringBuilder query;
+ query << '#';
+ for (size_t i = 0; i < Depth; ++i) {
+ query << "SELECT * FROM (";
+ }
+ query << "SELECT 1";
+ for (size_t i = 0; i < Depth; ++i) {
+ query << ")";
+ }
+
+ UNIT_ASSERT_EXCEPTION_CONTAINS(
+ Complete(engine, query), std::exception, "Maximum parse tree depth exceeded");
+}
+
} // Y_UNIT_TEST_SUITE(SqlCompleteTests)