From 004be3bf00f3d0aa22bb07e03bd6af146ad67c7b Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Wed, 13 Nov 2024 05:28:15 +0000 Subject: [PATCH] prepare utf-8 check bypass for database deserializer Signed-off-by: Jason Volk --- src/database/de.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/database/de.rs b/src/database/de.rs index d7dc1102..f8a038ef 100644 --- a/src/database/de.rs +++ b/src/database/de.rs @@ -277,7 +277,7 @@ impl<'a, 'de: 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> { fn deserialize_str>(self, visitor: V) -> Result { let input = self.record_next(); - let out = string::str_from_bytes(input)?; + let out = deserialize_str(input)?; visitor.visit_borrowed_str(out) } @@ -360,3 +360,18 @@ impl<'a, 'de: 'a> de::MapAccess<'de> for &'a mut Deserializer<'de> { seed.deserialize(&mut **self) } } + +// activate when stable; too soon now +//#[cfg(debug_assertions)] +#[inline] +fn deserialize_str(input: &[u8]) -> Result<&str> { string::str_from_bytes(input) } + +//#[cfg(not(debug_assertions))] +#[cfg(disable)] +#[inline] +fn deserialize_str(input: &[u8]) -> Result<&str> { + // SAFETY: Strings were written by the serializer to the database. Assuming no + // database corruption, the string will be valid. Database corruption is + // detected via rocksdb checksums. + unsafe { std::str::from_utf8_unchecked(input) } +}