From e1cb43a38fb450ace07e333fff69a583bdf0a571 Mon Sep 17 00:00:00 2001 From: Vitaly Stoyan Date: Wed, 11 Sep 2024 16:14:03 +0300 Subject: [PATCH 1/2] Check GUC settings' length (#9083) --- ydb/library/yql/parser/pg_wrapper/syscache.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ydb/library/yql/parser/pg_wrapper/syscache.cpp b/ydb/library/yql/parser/pg_wrapper/syscache.cpp index 4dfc98bb1993..916fa6cc0519 100644 --- a/ydb/library/yql/parser/pg_wrapper/syscache.cpp +++ b/ydb/library/yql/parser/pg_wrapper/syscache.cpp @@ -696,10 +696,10 @@ namespace NMiniKQL { void PgCreateSysCacheEntries(void* ctx) { auto main = (TMainContext*)ctx; if (main->GUCSettings) { - if (main->GUCSettings->Get("ydb_database")) { + if (main->GUCSettings->Get("ydb_database") && main->GUCSettings->Get("ydb_database")->size() < NAMEDATALEN) { main->CurrentDatabaseName = NYql::TSysCache::MakePgDatabaseHeapTuple(NYql::PG_CURRENT_DATABASE_ID, main->GUCSettings->Get("ydb_database")->c_str()); } - if (main->GUCSettings->Get("ydb_user")) { + if (main->GUCSettings->Get("ydb_user") && main->GUCSettings->Get("ydb_user")->size() < NAMEDATALEN) { main->CurrentUserName = NYql::TSysCache::MakePgRolesHeapTuple(NYql::PG_CURRENT_USER_ID, main->GUCSettings->Get("ydb_user")->c_str()); } } From d9fb84c82220fb457709e2274030051f1abaf3ee Mon Sep 17 00:00:00 2001 From: Nikolay Shumkov Date: Wed, 11 Sep 2024 20:01:14 +0300 Subject: [PATCH 2/2] Long domain name test (#9106) --- ydb/core/kqp/ut/pg/kqp_pg_ut.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp b/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp index 72c95312fab6..bf610134fc81 100644 --- a/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp +++ b/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp @@ -4733,6 +4733,33 @@ Y_UNIT_TEST_SUITE(KqpPg) { UNIT_ASSERT_VALUES_EQUAL(ydbResults.begin()->Getcolumns().at(i).Getname(), colNames[i]); } } + + Y_UNIT_TEST(LongDomainName) { + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnablePreparedDdl(true); + auto setting = NKikimrKqp::TKqpSetting(); + auto serverSettings = TKikimrSettings() + .SetAppConfig(appConfig) + .SetKqpSettings({setting}) + .SetDomainRoot(std::string(65, 'a')); + TKikimrRunner kikimr(serverSettings.SetWithSampleTables(false)); + auto db = kikimr.GetQueryClient(); + auto settings = NYdb::NQuery::TExecuteQuerySettings().Syntax(NYdb::NQuery::ESyntax::Pg); + { + auto result = db.ExecuteQuery(R"( + CREATE TABLE t (id INT PRIMARY KEY, data1 UUID[]); + )", NYdb::NQuery::TTxControl::NoTx(), settings).ExtractValueSync(); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + } + + { + const auto query = Q_(R"( + SELECT * FROM t; + )"); + auto result = db.ExecuteQuery(query, NYdb::NQuery::TTxControl::BeginTx().CommitTx(), settings).ExtractValueSync(); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + } + } } } // namespace NKqp