From b0345f405e7d172bca816e46bc0bce434abda4ce Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 28 Sep 2023 12:26:39 +0300 Subject: [PATCH] fixed alignment issues in podvecview - #538 --- fyrox-core/src/visitor.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/fyrox-core/src/visitor.rs b/fyrox-core/src/visitor.rs index 9438468f3..f7cd08f30 100644 --- a/fyrox-core/src/visitor.rs +++ b/fyrox-core/src/visitor.rs @@ -201,12 +201,17 @@ impl<'a, T: Pod> Visit for PodVecView<'a, T> { bytes, } => { if *type_id == self.type_id { - let mut owned_bytes = bytes.clone(); - let len = owned_bytes.len() / (*element_size as usize); - *self.vec = unsafe { - Vec::from_raw_parts(owned_bytes.as_mut_ptr() as *mut T, len, len) - }; - std::mem::forget(owned_bytes); + let len = bytes.len() / *element_size as usize; + let mut data = Vec::::with_capacity(len); + unsafe { + data.set_len(len); + std::ptr::copy_nonoverlapping( + bytes.as_ptr(), + data.as_mut_ptr() as *mut u8, + bytes.len(), + ); + } + *self.vec = data; Ok(()) } else { Err(VisitError::TypeMismatch)