Fix storage engine bug for zero-sized map entries

gt was applicable here instead of ge, since for zero-sized elements, we
may have already reached the end of allocation.
next
Sayan Nandan 3 years ago
parent 026cddaaaf
commit ad403421d4

@ -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;
}

@ -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();

Loading…
Cancel
Save