Fixes pedantic clippy ptr cast lints in append_vec.rs (#650)
This commit is contained in:
parent
c75fe56354
commit
731d36ab26
|
@ -30,6 +30,7 @@ use {
|
||||||
io::{Seek, SeekFrom, Write},
|
io::{Seek, SeekFrom, Write},
|
||||||
mem,
|
mem,
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
|
ptr,
|
||||||
sync::{
|
sync::{
|
||||||
atomic::{AtomicU64, AtomicUsize, Ordering},
|
atomic::{AtomicU64, AtomicUsize, Ordering},
|
||||||
Mutex,
|
Mutex,
|
||||||
|
@ -173,8 +174,9 @@ impl<'append_vec> AppendVecStoredAccountMeta<'append_vec> {
|
||||||
// Use extra references to avoid value silently clamped to 1 (=true) and 0 (=false)
|
// Use extra references to avoid value silently clamped to 1 (=true) and 0 (=false)
|
||||||
// Yes, this really happens; see test_new_from_file_crafted_executable
|
// Yes, this really happens; see test_new_from_file_crafted_executable
|
||||||
let executable_bool: &bool = &self.account_meta.executable;
|
let executable_bool: &bool = &self.account_meta.executable;
|
||||||
|
let executable_bool_ptr = ptr::from_ref(executable_bool);
|
||||||
// UNSAFE: Force to interpret mmap-backed bool as u8 to really read the actual memory content
|
// UNSAFE: Force to interpret mmap-backed bool as u8 to really read the actual memory content
|
||||||
let executable_byte: &u8 = unsafe { &*(executable_bool as *const bool as *const u8) };
|
let executable_byte: &u8 = unsafe { &*(executable_bool_ptr.cast()) };
|
||||||
executable_byte
|
executable_byte
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -476,8 +478,8 @@ impl AppendVec {
|
||||||
//Mutex<()> guarantees exclusive write access to the memory occupied in
|
//Mutex<()> guarantees exclusive write access to the memory occupied in
|
||||||
//the range.
|
//the range.
|
||||||
unsafe {
|
unsafe {
|
||||||
let dst = data.as_ptr() as *mut u8;
|
let dst = data.as_ptr() as *mut _;
|
||||||
std::ptr::copy(src, dst, len);
|
ptr::copy(src, dst, len);
|
||||||
};
|
};
|
||||||
*offset = pos + len;
|
*offset = pos + len;
|
||||||
}
|
}
|
||||||
|
@ -510,7 +512,7 @@ impl AppendVec {
|
||||||
/// that falls on a 64-byte boundary.
|
/// that falls on a 64-byte boundary.
|
||||||
fn get_type<T>(&self, offset: usize) -> Option<(&T, usize)> {
|
fn get_type<T>(&self, offset: usize) -> Option<(&T, usize)> {
|
||||||
let (data, next) = self.get_slice(offset, mem::size_of::<T>())?;
|
let (data, next) = self.get_slice(offset, mem::size_of::<T>())?;
|
||||||
let ptr: *const T = data.as_ptr() as *const T;
|
let ptr = data.as_ptr().cast();
|
||||||
//UNSAFE: The cast is safe because the slice is aligned and fits into the memory
|
//UNSAFE: The cast is safe because the slice is aligned and fits into the memory
|
||||||
//and the lifetime of the &T is tied to self, which holds the underlying memory map
|
//and the lifetime of the &T is tied to self, which holds the underlying memory map
|
||||||
Some((unsafe { &*ptr }, next))
|
Some((unsafe { &*ptr }, next))
|
||||||
|
@ -858,7 +860,7 @@ pub mod tests {
|
||||||
// UNSAFE: cast away & (= const ref) to &mut to force to mutate append-only (=read-only) AppendVec
|
// UNSAFE: cast away & (= const ref) to &mut to force to mutate append-only (=read-only) AppendVec
|
||||||
unsafe {
|
unsafe {
|
||||||
#[allow(invalid_reference_casting)]
|
#[allow(invalid_reference_casting)]
|
||||||
std::ptr::write(
|
ptr::write(
|
||||||
std::mem::transmute::<*const u64, *mut u64>(&self.meta.data_len),
|
std::mem::transmute::<*const u64, *mut u64>(&self.meta.data_len),
|
||||||
new_data_len,
|
new_data_len,
|
||||||
);
|
);
|
||||||
|
@ -876,7 +878,7 @@ pub mod tests {
|
||||||
// UNSAFE: Force to interpret mmap-backed &bool as &u8 to write some crafted value;
|
// UNSAFE: Force to interpret mmap-backed &bool as &u8 to write some crafted value;
|
||||||
unsafe {
|
unsafe {
|
||||||
#[allow(invalid_reference_casting)]
|
#[allow(invalid_reference_casting)]
|
||||||
std::ptr::write(
|
ptr::write(
|
||||||
std::mem::transmute::<*const bool, *mut u8>(&self.account_meta.executable),
|
std::mem::transmute::<*const bool, *mut u8>(&self.account_meta.executable),
|
||||||
new_executable_byte,
|
new_executable_byte,
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue