From 52cc70cf458517ef70b2e665079d82dfbe77f4fd Mon Sep 17 00:00:00 2001 From: Lukasz Anforowicz Date: Tue, 29 Aug 2023 19:30:07 +0000 Subject: [PATCH] safety: verify alignment requirements of floats vs ints Fixes #194, Closes #195 --- src/lib.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index bcb53f3..cfd53c3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -74,7 +74,8 @@ cases. #![cfg_attr(miri, allow(dead_code, unused_macros))] use core::{ - convert::TryInto, fmt::Debug, hash::Hash, ptr::copy_nonoverlapping, slice, + convert::TryInto, fmt::Debug, hash::Hash, mem::align_of, + ptr::copy_nonoverlapping, slice, }; #[cfg(feature = "std")] @@ -1205,6 +1206,7 @@ pub trait ByteOrder: #[inline] fn read_f32_into(src: &[u8], dst: &mut [f32]) { let dst = unsafe { + const _: () = assert!(align_of::() <= align_of::()); slice::from_raw_parts_mut(dst.as_mut_ptr() as *mut u32, dst.len()) }; Self::read_u32_into(src, dst); @@ -1266,6 +1268,7 @@ pub trait ByteOrder: #[inline] fn read_f64_into(src: &[u8], dst: &mut [f64]) { let dst = unsafe { + const _: () = assert!(align_of::() <= align_of::()); slice::from_raw_parts_mut(dst.as_mut_ptr() as *mut u64, dst.len()) }; Self::read_u64_into(src, dst);