]> git.mikk.net Git - mtbl-rs/commitdiff
reader: handle seeking past end of index block
authorChris Mikkelson <cmikk@fsi.io>
Thu, 8 Aug 2024 12:38:07 +0000 (06:38 -0600)
committerChris Mikkelson <cmikk@fsi.io>
Thu, 8 Aug 2024 12:38:07 +0000 (06:38 -0600)
src/reader/mod.rs

index 72b7354079c6ad5c0d577060156a20d5772cc660..255eb1cdf3355cea525c0ed4e8abbd8cc4d7d9c9 100644 (file)
@@ -148,12 +148,20 @@ impl<D: AsRef<[u8]>> Iter for ReaderIter<D> {
     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
+            });
     }
 }