From 01c893763db79713dac3c65f1a6a6d5393d36783 Mon Sep 17 00:00:00 2001 From: NathanW Date: Mon, 19 Apr 2021 14:29:57 -0600 Subject: [PATCH] [bevy_core/bytes] Fix UB with accessing memory with incorrect alignment --- crates/bevy_core/src/bytes.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/crates/bevy_core/src/bytes.rs b/crates/bevy_core/src/bytes.rs index f5846c67bce56..6a4a4a05559c0 100644 --- a/crates/bevy_core/src/bytes.rs +++ b/crates/bevy_core/src/bytes.rs @@ -50,9 +50,8 @@ where { fn from_bytes(bytes: &[u8]) -> Self { unsafe { - let byte_ptr = bytes.as_ptr(); - let ptr = byte_ptr as *const Self; - (*ptr).clone() + let ptr = bytes.as_ptr() as *const Self; + std::ptr::read_unaligned(ptr) } } } @@ -170,10 +169,8 @@ where { fn from_bytes(bytes: &[u8]) -> Self { unsafe { - let byte_ptr = bytes.as_ptr() as *const T; - let len = bytes.len() / std::mem::size_of::(); - let slice = core::slice::from_raw_parts::(byte_ptr, len); - slice.to_vec() + let (_, body, _) = bytes.align_to::(); + body.to_vec() } } }