summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorivanmorozov333 <[email protected]>2024-11-25 12:27:39 +0300
committerGitHub <[email protected]>2024-11-25 12:27:39 +0300
commitafbc266232aa2f58d2c41dd93025b9094490b24b (patch)
tree6c5bb69e8df7503a44de6fc99e5304bd15a5e37c
parent71a7067d74978f3eba80566c1404a5b416b19228 (diff)
validate dangerouse construction (#11873)
-rw-r--r--ydb/core/tx/columnshard/engines/scheme/indexes/abstract/program.cpp7
-rw-r--r--ydb/core/tx/program/program.h5
2 files changed, 11 insertions, 1 deletions
diff --git a/ydb/core/tx/columnshard/engines/scheme/indexes/abstract/program.cpp b/ydb/core/tx/columnshard/engines/scheme/indexes/abstract/program.cpp
index 62ae9bd41a6..8b62f7890c3 100644
--- a/ydb/core/tx/columnshard/engines/scheme/indexes/abstract/program.cpp
+++ b/ydb/core/tx/columnshard/engines/scheme/indexes/abstract/program.cpp
@@ -443,7 +443,12 @@ public:
std::shared_ptr<TDataForIndexesCheckers> TDataForIndexesCheckers::Build(const TProgramContainer& program) {
AFL_DEBUG(NKikimrServices::TX_COLUMNSHARD)("program", program.DebugString());
- auto fStep = program.GetSteps().front();
+ auto& steps = program.GetStepsVerified();
+ if (!steps.size()) {
+ AFL_WARN(NKikimrServices::TX_COLUMNSHARD)("event", "no_steps_in_program");
+ return nullptr;
+ }
+ auto fStep = steps.front();
TNormalForm nForm;
for (auto&& s : fStep->GetAssignes()) {
if (!nForm.Add(s, program)) {
diff --git a/ydb/core/tx/program/program.h b/ydb/core/tx/program/program.h
index 3ab18eccc9d..41cd2a06db1 100644
--- a/ydb/core/tx/program/program.h
+++ b/ydb/core/tx/program/program.h
@@ -85,6 +85,11 @@ public:
}
}
+ const std::vector<std::shared_ptr<NSsa::TProgramStep>>& GetStepsVerified() const {
+ AFL_VERIFY(!!Program);
+ return Program->Steps;
+ }
+
template <class TDataContainer>
inline arrow::Status ApplyProgram(std::shared_ptr<TDataContainer>& batch) const {
if (Program) {