This is an automated email from the ASF dual-hosted git repository. airborne pushed a commit to branch branch-3.0 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push: new 962a2e6250c [Fix](inverted index) fix use after free when duplicate key in index dir when index file writer open index #42207 (#42300) 962a2e6250c is described below commit 962a2e6250c57ecea915d7ea0fc9255a840c5f6f Author: airborne12 <airborn...@gmail.com> AuthorDate: Wed Oct 23 14:29:11 2024 +0800 [Fix](inverted index) fix use after free when duplicate key in index dir when index file writer open index #42207 (#42300) cherry pick from #42207 --- .../rowset/segment_v2/inverted_index_file_writer.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/be/src/olap/rowset/segment_v2/inverted_index_file_writer.cpp b/be/src/olap/rowset/segment_v2/inverted_index_file_writer.cpp index d11b9fa54d0..7a784a55b86 100644 --- a/be/src/olap/rowset/segment_v2/inverted_index_file_writer.cpp +++ b/be/src/olap/rowset/segment_v2/inverted_index_file_writer.cpp @@ -51,14 +51,26 @@ Result<DorisFSDirectory*> InvertedIndexFileWriter::open(const TabletIndex* index if (exists) { LOG(ERROR) << "try to init a directory:" << local_fs_index_path << " already exists"; - return ResultError(Status::InternalError("init_fulltext_index directory already exists")); + return ResultError( + Status::InternalError("InvertedIndexFileWriter::open directory already exists")); } bool can_use_ram_dir = true; auto* dir = DorisFSDirectoryFactory::getDirectory(local_fs, local_fs_index_path.c_str(), can_use_ram_dir); - _indices_dirs.emplace(std::make_pair(index_meta->index_id(), index_meta->get_index_suffix()), - std::unique_ptr<DorisFSDirectory>(dir)); + auto key = std::make_pair(index_meta->index_id(), index_meta->get_index_suffix()); + auto [it, inserted] = _indices_dirs.emplace(key, std::unique_ptr<DorisFSDirectory>(dir)); + if (!inserted) { + LOG(ERROR) << "InvertedIndexFileWriter::open attempted to insert a duplicate key: (" + << key.first << ", " << key.second << ")"; + LOG(ERROR) << "Directories already in map: "; + for (const auto& entry : _indices_dirs) { + LOG(ERROR) << "Key: (" << entry.first.first << ", " << entry.first.second << ")"; + } + return ResultError(Status::InternalError( + "InvertedIndexFileWriter::open attempted to insert a duplicate dir")); + } + return dir; } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org