diff --git a/src/database/de.rs b/src/database/de.rs index 4fdc2251..7cc8f00a 100644 --- a/src/database/de.rs +++ b/src/database/de.rs @@ -298,9 +298,11 @@ impl<'a, 'de: 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> { fn deserialize_i64>(self, visitor: V) -> Result { const BYTES: usize = size_of::(); - let end = self.pos.saturating_add(BYTES); + let end = self.pos.saturating_add(BYTES).min(self.buf.len()); let bytes: ArrayVec = self.buf[self.pos..end].try_into()?; - let bytes = bytes.into_inner().expect("array size matches i64"); + let bytes = bytes + .into_inner() + .map_err(|_| Self::Error::SerdeDe("i64 buffer underflow".into()))?; self.inc_pos(BYTES); visitor.visit_i64(i64::from_be_bytes(bytes)) @@ -328,9 +330,11 @@ impl<'a, 'de: 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> { fn deserialize_u64>(self, visitor: V) -> Result { const BYTES: usize = size_of::(); - let end = self.pos.saturating_add(BYTES); + let end = self.pos.saturating_add(BYTES).min(self.buf.len()); let bytes: ArrayVec = self.buf[self.pos..end].try_into()?; - let bytes = bytes.into_inner().expect("array size matches u64"); + let bytes = bytes + .into_inner() + .map_err(|_| Self::Error::SerdeDe("u64 buffer underflow".into()))?; self.inc_pos(BYTES); visitor.visit_u64(u64::from_be_bytes(bytes))