diff --git a/server/src/storage/mod.rs b/server/src/storage/mod.rs index 10a9f4a9..4d467589 100644 --- a/server/src/storage/mod.rs +++ b/server/src/storage/mod.rs @@ -409,7 +409,7 @@ mod de { // this is what we have left: [KLEN:8B][VLEN:8B] let end_ptr = data.as_ptr().add(data.len()); for _ in 0..len { - if (ptr.add(16)) >= end_ptr { + if (ptr.add(16)) > end_ptr { // not enough space return None; } diff --git a/server/src/storage/tests.rs b/server/src/storage/tests.rs index 59836a7d..31e42a8e 100644 --- a/server/src/storage/tests.rs +++ b/server/src/storage/tests.rs @@ -34,6 +34,19 @@ fn test_serialize_deserialize_empty() { assert!(de.len() == 0); } +#[test] +fn test_serialize_deserialize_map_with_empty_elements() { + let cmap = Coremap::new(); + cmap.true_if_insert(Data::from("sayan"), Data::from("")); + cmap.true_if_insert(Data::from("sayan's second key"), Data::from("")); + cmap.true_if_insert(Data::from("sayan's third key"), Data::from("")); + cmap.true_if_insert(Data::from(""), Data::from("")); + let ser = se::serialize_map(&cmap).unwrap(); + let de = de::deserialize_map(ser).unwrap(); + assert_eq!(de.len(), cmap.len()); + assert!(cmap.into_iter().all(|(k, v)| de.get(&k).unwrap().eq(&v))); +} + #[test] fn test_ser_de_few_elements() { let cmap = Coremap::new();