diff --git a/src/storage/blocksstable/encoding/ob_encoding_bitset.h b/src/storage/blocksstable/encoding/ob_encoding_bitset.h index b558127ad..335251f07 100644 --- a/src/storage/blocksstable/encoding/ob_encoding_bitset.h +++ b/src/storage/blocksstable/encoding/ob_encoding_bitset.h @@ -670,9 +670,16 @@ OB_INLINE int ObBitMapMetaReader::read_exc_cell(const char *buf, } } } - datum.ptr_ = buf + meta->data_offset_ + offset; + MEMCPY(const_cast(datum.ptr_), buf + meta->data_offset_ + offset, sizeof(ObNumberDesc)); const uint8_t num_len = datum.num_->desc_.len_; datum.pack_ = sizeof(ObNumberDesc) + num_len * sizeof(uint32_t); + if (OB_LIKELY(1 == num_len)) { + MEMCPY(const_cast(datum.ptr_) + sizeof(ObNumberDesc), + buf + meta->data_offset_ + offset + sizeof(ObNumberDesc), sizeof(uint32_t)); + } else { + MEMCPY(const_cast(datum.ptr_) + sizeof(ObNumberDesc), + buf + meta->data_offset_ + offset + sizeof(ObNumberDesc), num_len * sizeof(uint32_t)); + } return ret; }