diff options
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.cpp | 19 |
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) |
