diff --git a/rkyv/src/collections/swiss_table/table.rs b/rkyv/src/collections/swiss_table/table.rs index d3d118dc..d0d95a0d 100644 --- a/rkyv/src/collections/swiss_table/table.rs +++ b/rkyv/src/collections/swiss_table/table.rs @@ -23,8 +23,9 @@ use core::{ error::Error, fmt, marker::PhantomData, - mem::size_of, + mem::{size_of, MaybeUninit}, ptr::{self, null, NonNull}, + slice::from_raw_parts, }; use munge::munge; @@ -446,6 +447,16 @@ impl ArchivedHashTable { } } + let mut zeros = MaybeUninit::::uninit(); + unsafe { + zeros.as_mut_ptr().write_bytes(0, 1); + } + let zeros = unsafe { + from_raw_parts( + zeros.as_ptr().cast::(), + size_of::(), + ) + }; SerVec::with_capacity( serializer, len, @@ -471,7 +482,7 @@ impl ArchivedHashTable { )?; } } else { - serializer.pad(size_of::())?; + serializer.write(zeros)?; } } diff --git a/rkyv/src/ser/writer/core.rs b/rkyv/src/ser/writer/core.rs index 0656d63f..d7ba3751 100644 --- a/rkyv/src/ser/writer/core.rs +++ b/rkyv/src/ser/writer/core.rs @@ -178,7 +178,7 @@ mod tests { }; #[test] - fn zeroes_padding() { + fn zeros_padding() { use core::mem::size_of; use crate::{Archive, Serialize}; diff --git a/rkyv/src/ser/writer/mod.rs b/rkyv/src/ser/writer/mod.rs index 654aba4d..8778581c 100644 --- a/rkyv/src/ser/writer/mod.rs +++ b/rkyv/src/ser/writer/mod.rs @@ -83,11 +83,11 @@ where pub trait WriterExt: Writer { /// Advances the given number of bytes as padding. fn pad(&mut self, padding: usize) -> Result<(), E> { - const MAX_ZEROES: usize = 32; - const ZEROES: [u8; MAX_ZEROES] = [0; MAX_ZEROES]; - debug_assert!(padding < MAX_ZEROES); + const MAX_ZEROS: usize = 32; + const ZEROS: [u8; MAX_ZEROS] = [0; MAX_ZEROS]; + debug_assert!(padding < MAX_ZEROS); - self.write(&ZEROES[0..padding]) + self.write(&ZEROS[0..padding]) } /// Aligns the position of the serializer to the given alignment.