From 6d0f23600ff2a588767b1c74e1c52733e3c59ac0 Mon Sep 17 00:00:00 2001 From: Chris Mikkelson Date: Thu, 8 Aug 2024 06:38:07 -0600 Subject: [PATCH] reader: handle seeking past end of index block --- src/reader/mod.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/reader/mod.rs b/src/reader/mod.rs index 72b7354..255eb1c 100644 --- a/src/reader/mod.rs +++ b/src/reader/mod.rs @@ -148,12 +148,20 @@ impl> Iter for ReaderIter { fn seek(&mut self, key: &[u8]) { // TODO: detect and skip unneeded seek in iter. self.index_iter.seek(key); - self.index_iter.next().and_then(|e| { - self.next_offset = usize::decode_var(e.value.as_slice())?.0; - self.next_block().map(|_| { - self.data_iter.as_mut().unwrap().seek(key); + + self.index_iter + .next() + .and_then(|e| { + self.next_offset = usize::decode_var(e.value.as_slice())?.0; + self.next_block().map(|_| { + self.data_iter.as_mut().unwrap().seek(key); + }) }) - }); + .or_else(|| { + self.next_offset = usize::MAX; + self.data_iter.take(); + None + }); } } -- 2.50.1