From 4a0a0b86ecbb81c3478599eb97bb4996789217cf Mon Sep 17 00:00:00 2001 From: librelois <c@elo.tf> Date: Sat, 5 Jun 2021 18:57:46 +0200 Subject: [PATCH] fix(kv_typed): deser empty bytes with get_ref_slice --- tools/kv_typed/src/as_bytes.rs | 4 ++-- tools/kv_typed/src/backend/leveldb.rs | 4 +++- tools/kv_typed/src/backend/lmdb.rs | 4 +++- tools/kv_typed/src/backend/memory.rs | 4 +++- tools/kv_typed/src/backend/memory_singleton.rs | 4 +++- tools/kv_typed/src/backend/sled.rs | 4 +++- 6 files changed, 17 insertions(+), 7 deletions(-) diff --git a/tools/kv_typed/src/as_bytes.rs b/tools/kv_typed/src/as_bytes.rs index 4e79a4f..4e8cebe 100644 --- a/tools/kv_typed/src/as_bytes.rs +++ b/tools/kv_typed/src/as_bytes.rs @@ -67,11 +67,11 @@ mod tests { #[test] fn test_btreeset_as_bytes() { - BTreeSet::<u64>::new().as_bytes(|bytes| assert_eq!(bytes, &[])); + BTreeSet::<u64>::new().as_bytes(|bytes| assert!(bytes.is_empty())); } #[test] fn test_hashset_as_bytes() { - HashSet::<u64>::new().as_bytes(|bytes| assert_eq!(bytes, &[])); + HashSet::<u64>::new().as_bytes(|bytes| assert!(bytes.is_empty())); } } diff --git a/tools/kv_typed/src/backend/leveldb.rs b/tools/kv_typed/src/backend/leveldb.rs index 1ecd676..22692c7 100644 --- a/tools/kv_typed/src/backend/leveldb.rs +++ b/tools/kv_typed/src/backend/leveldb.rs @@ -171,7 +171,9 @@ impl BackendCol for LevelDbCol { self.0 .get(ReadOptions::new(), k_bytes)? .map(|bytes| { - if let Some(layout_verified) = + if bytes.is_empty() { + f(&[]) + } else if let Some(layout_verified) = zerocopy::LayoutVerified::<_, [V::Elem]>::new_slice( &bytes[V::prefix_len()..], ) diff --git a/tools/kv_typed/src/backend/lmdb.rs b/tools/kv_typed/src/backend/lmdb.rs index ceb728f..e305328 100644 --- a/tools/kv_typed/src/backend/lmdb.rs +++ b/tools/kv_typed/src/backend/lmdb.rs @@ -324,7 +324,9 @@ impl BackendCol for LmdbCol { .get::<_, [u8]>(&self.inner.tree, k_bytes) .to_opt()? .map(|bytes| { - if let Some(layout_verified) = + if bytes.is_empty() { + f(&[]) + } else if let Some(layout_verified) = zerocopy::LayoutVerified::<_, [V::Elem]>::new_slice( &bytes[V::prefix_len()..], ) diff --git a/tools/kv_typed/src/backend/memory.rs b/tools/kv_typed/src/backend/memory.rs index f9c4187..0d50e78 100644 --- a/tools/kv_typed/src/backend/memory.rs +++ b/tools/kv_typed/src/backend/memory.rs @@ -138,7 +138,9 @@ impl BackendCol for MemCol { self.tree .get(k_bytes) .map(|bytes| { - if let Some(layout_verified) = + if bytes.is_empty() { + f(&[]) + } else if let Some(layout_verified) = zerocopy::LayoutVerified::<_, [V::Elem]>::new_slice( &bytes[V::prefix_len()..], ) diff --git a/tools/kv_typed/src/backend/memory_singleton.rs b/tools/kv_typed/src/backend/memory_singleton.rs index 5f49a8c..786ca4e 100644 --- a/tools/kv_typed/src/backend/memory_singleton.rs +++ b/tools/kv_typed/src/backend/memory_singleton.rs @@ -121,7 +121,9 @@ impl BackendCol for MemCol { self.0 .as_ref() .map(|bytes| { - if let Some(layout_verified) = + if bytes.is_empty() { + f(&[]) + } else if let Some(layout_verified) = zerocopy::LayoutVerified::<_, [V::Elem]>::new_slice(&bytes[V::prefix_len()..]) { f(&layout_verified) diff --git a/tools/kv_typed/src/backend/sled.rs b/tools/kv_typed/src/backend/sled.rs index 592a6bd..9d13580 100644 --- a/tools/kv_typed/src/backend/sled.rs +++ b/tools/kv_typed/src/backend/sled.rs @@ -121,7 +121,9 @@ impl BackendCol for SledCol { self.0 .get(k_bytes)? .map(|bytes| { - if let Some(layout_verified) = + if bytes.is_empty() { + f(&[]) + } else if let Some(layout_verified) = zerocopy::LayoutVerified::<_, [V::Elem]>::new_slice( &bytes[V::prefix_len()..], ) -- GitLab