From 3efe5eab4f404ca18b022137be39c0038366324a Mon Sep 17 00:00:00 2001 From: Riccardo Casatta Date: Tue, 26 Nov 2024 18:06:46 +0100 Subject: [PATCH 1/2] fix hit of expect in slice cache --- src/slice_cache.rs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/slice_cache.rs b/src/slice_cache.rs index 820bdfa..0174cd7 100644 --- a/src/slice_cache.rs +++ b/src/slice_cache.rs @@ -126,9 +126,11 @@ impl SliceCache { // the element would not fit in the buffer, start again from the beginning, // but first remove any element in the buffer tail, otherwise inserted_range will not // overlap with the latest elements - let range = Range::from_begin_end(self.free_pointer, self.buffer.len()) - .expect("the buffer is longer than free_pointer as ensured by the if clause"); - removed += self.remove_range(&range); + + if let Some(range) = Range::from_begin_end(self.free_pointer, self.buffer.len()) { + // we are removing only if the range is valid, it can happen `self.free_pointer == self.buffer.len()` and it that case we don't need to remove anything + removed += self.remove_range(&range); + } self.free_pointer = 0; self.full = true; } @@ -370,4 +372,17 @@ mod tests { assert_eq!(val.as_ref(), segwit_tx); } + + #[test] + fn insert_when_buffer_exactly_full() { + let mut cache = SliceCache::new(10); + + let k1 = 0; + let v1 = [0; 10usize]; + cache.insert(k1, &v1).unwrap(); + + let k2 = 1; + let v2 = [0]; + cache.insert(k2, &v2).unwrap(); + } } From b3f6af9dbae96f0f95fb5cd3a448d19453b4beec Mon Sep 17 00:00:00 2001 From: Riccardo Casatta Date: Tue, 26 Nov 2024 18:07:17 +0100 Subject: [PATCH 2/2] bump version 0.9.0 -> 0.9.1 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 64ca02c..ff61dbc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bitcoin_slices" -version = "0.9.0" +version = "0.9.1" edition = "2021" authors = ["Riccardo Casatta "] description = "Parse Bitcoin objects without allocations"