From 911406c822a0695d9aeda6f5117b472f3ce2fea4 Mon Sep 17 00:00:00 2001 From: yah01 Date: Wed, 16 Aug 2023 11:43:34 +0800 Subject: [PATCH] Check the offsets of search result (#26383) Signed-off-by: yah01 --- internal/core/src/segcore/Reduce.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/internal/core/src/segcore/Reduce.cpp b/internal/core/src/segcore/Reduce.cpp index 6215dbfe13..c5a48d9221 100644 --- a/internal/core/src/segcore/Reduce.cpp +++ b/internal/core/src/segcore/Reduce.cpp @@ -19,6 +19,7 @@ #include "SegmentInterface.h" #include "Utils.h" +#include "exceptions/EasyAssert.h" #include "pkVisitor.h" namespace milvus::segcore { @@ -86,12 +87,20 @@ ReduceHelper::FilterInvalidSearchResult(SearchResult* search_result) { ", expected size = " + std::to_string(nq * topK)); std::vector real_topks(nq, 0); uint32_t valid_index = 0; + auto segment = static_cast(search_result->segment_); auto& offsets = search_result->seg_offsets_; auto& distances = search_result->distances_; for (auto i = 0; i < nq; ++i) { for (auto j = 0; j < topK; ++j) { auto index = i * topK + j; if (offsets[index] != INVALID_SEG_OFFSET) { + AssertInfo(0 <= offsets[index] && + offsets[index] < segment->get_row_count(), + fmt::format("invalid offset {}, segment {} with " + "rows num {}, data or index corruption", + offsets[index], + segment->get_segment_id(), + segment->get_row_count())); real_topks[i]++; offsets[valid_index] = offsets[index]; distances[valid_index] = distances[index];