From a310dd776c8f33ef3ca6ce78dc00738f7dc800ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Mei=C3=9Fner?= Date: Fri, 4 Aug 2023 17:18:13 +0200 Subject: [PATCH] Fix - Uses `std::mem::transmute` and `std::ptr::write` in unsafe code in append_vec.rs (#32711) Uses std::mem::transmute and std::ptr::write in unsafe code in append_vec.rs --- runtime/src/append_vec.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/runtime/src/append_vec.rs b/runtime/src/append_vec.rs index ccc69eb21f..cd9cc50155 100644 --- a/runtime/src/append_vec.rs +++ b/runtime/src/append_vec.rs @@ -702,11 +702,13 @@ pub mod tests { } impl AppendVecStoredAccountMeta<'_> { - #[allow(clippy::cast_ref_to_mut)] fn set_data_len_unsafe(&self, new_data_len: u64) { // UNSAFE: cast away & (= const ref) to &mut to force to mutate append-only (=read-only) AppendVec unsafe { - *(&self.meta.data_len as *const u64 as *mut u64) = new_data_len; + std::ptr::write( + std::mem::transmute::<*const u64, *mut u64>(&self.meta.data_len), + new_data_len, + ); } } @@ -717,11 +719,13 @@ pub mod tests { executable_byte } - #[allow(clippy::cast_ref_to_mut)] fn set_executable_as_byte(&self, new_executable_byte: u8) { // UNSAFE: Force to interpret mmap-backed &bool as &u8 to write some crafted value; unsafe { - *(&self.account_meta.executable as *const bool as *mut u8) = new_executable_byte; + std::ptr::write( + std::mem::transmute::<*const bool, *mut u8>(&self.account_meta.executable), + new_executable_byte, + ); } } }