diff --git a/wincode/src/schema/impls.rs b/wincode/src/schema/impls.rs index cb5d520f..80127e9d 100644 --- a/wincode/src/schema/impls.rs +++ b/wincode/src/schema/impls.rs @@ -1039,8 +1039,10 @@ unsafe impl<'de, C: Config> SchemaRead<'de, C> for String { #[inline] fn read(mut reader: impl Reader<'de>, dst: &mut MaybeUninit) -> ReadResult<()> { let len = C::LengthEncoding::read_prealloc_check::(&mut reader)?; - let bytes = reader.fill_exact(len)?.to_vec(); - unsafe { reader.consume_unchecked(len) }; + let mut bytes: Vec = Vec::with_capacity(len); + reader.copy_into_slice(bytes.spare_capacity_mut())?; + // SAFETY: `copy_into_slice` ensures we fill the entire `bytes.spare_capacity_mut()` slice. + unsafe { bytes.set_len(len) }; match String::from_utf8(bytes) { Ok(s) => { dst.write(s);