in below/store/src/cursor.rs [447:474]
fn get_index_and_data_at(&self, index_offset: usize) -> Result<(&IndexEntry, &[u8])> {
let index_entry = self
.get_index_entry_at(index_offset)
.ok_or_else(|| anyhow!("Failed to get index entry at offset {}", index_offset))?;
let data_mmap = self
.data_mmap
.as_ref()
.ok_or_else(|| anyhow!("Failed to get mmap"))?;
let data_offset = index_entry.offset as usize;
let data_len = index_entry.len as usize;
let data_slice = data_mmap
.get(
data_offset
..(data_offset
.checked_add(data_len)
.ok_or_else(|| anyhow!("overflow"))?),
)
.ok_or_else(|| anyhow!("Failed to get data slice from mmap"))?;
if data_slice.crc32() != index_entry.data_crc {
bail!(
"Corrupted data entry found: ts={} offset={:#x}",
index_entry.timestamp,
index_entry.offset,
);
};
Ok((index_entry, data_slice))
}