This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit d70d8621d5fc2fb2383cde0f948cbbd478e3420e Author: huanghaibin <284824...@qq.com> AuthorDate: Wed Feb 7 21:22:45 2024 +0800 [fix](group_commit)Add bounds checking when reading wal file on group commit (#30940) --- be/src/vec/exec/format/wal/wal_reader.cpp | 12 +++++++++++- be/src/vec/exec/format/wal/wal_reader.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/be/src/vec/exec/format/wal/wal_reader.cpp b/be/src/vec/exec/format/wal/wal_reader.cpp index 98bb35c4bc9..cb89dd9bcf0 100644 --- a/be/src/vec/exec/format/wal/wal_reader.cpp +++ b/be/src/vec/exec/format/wal/wal_reader.cpp @@ -62,9 +62,18 @@ Status WalReader::get_next_block(Block* block, size_t* read_rows, bool* eof) { vectorized::Block dst_block; int index = 0; auto columns = block->get_columns_with_type_and_name(); - CHECK(columns.size() == _tuple_descriptor->slots().size()); + if (_column_id_count != columns.size() || columns.size() != _tuple_descriptor->slots().size()) { + return Status::InternalError( + "not equal _column_id_count={} vs columns size={} vs tuple_descriptor size={}", + std::to_string(_column_id_count), std::to_string(columns.size()), + std::to_string(_tuple_descriptor->slots().size())); + } for (auto slot_desc : _tuple_descriptor->slots()) { auto pos = _column_pos_map[slot_desc->col_unique_id()]; + if (pos >= src_block.columns()) { + return Status::InternalError("read wal {} fail, pos {}, columns size {}", _wal_path, + pos, src_block.columns()); + } vectorized::ColumnPtr column_ptr = src_block.get_by_position(pos).column; if (column_ptr != nullptr && slot_desc->is_nullable()) { column_ptr = make_nullable(column_ptr); @@ -86,6 +95,7 @@ Status WalReader::get_columns(std::unordered_map<std::string, TypeDescriptor>* n RETURN_IF_ERROR(_wal_reader->read_header(col_ids)); std::vector<std::string> column_id_vector = strings::Split(col_ids, ",", strings::SkipWhitespace()); + _column_id_count = column_id_vector.size(); try { int64_t pos = 0; for (auto col_id_str : column_id_vector) { diff --git a/be/src/vec/exec/format/wal/wal_reader.h b/be/src/vec/exec/format/wal/wal_reader.h index e65af10016a..d2636d5495e 100644 --- a/be/src/vec/exec/format/wal/wal_reader.h +++ b/be/src/vec/exec/format/wal/wal_reader.h @@ -40,6 +40,7 @@ private: const TupleDescriptor* _tuple_descriptor = nullptr; // column_id, column_pos std::map<int64_t, int64_t> _column_pos_map; + int64_t _column_id_count; }; } // namespace vectorized } // namespace doris --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org