found the soundness hole

This commit is contained in:
missing 2022-08-14 18:31:10 -05:00
parent 63c28955aa
commit 7e743be9d8

View file

@ -6,6 +6,7 @@ use std::{
fmt::Debug,
mem::size_of,
ops::{Deref, DerefMut},
ptr::NonNull,
slice,
vec::Vec as StdVec,
};
@ -161,15 +162,23 @@ impl<T> Deref for Vec<T> {
type Target = [T];
fn deref(&self) -> &Self::Target {
if self.is_empty() {
unsafe { slice::from_raw_parts(NonNull::dangling().as_ptr(), 0) }
} else {
unsafe { slice::from_raw_parts(self.get_ptr(0), self.len) }
}
}
}
impl<T> DerefMut for Vec<T> {
fn deref_mut(&mut self) -> &mut Self::Target {
if self.is_empty() {
unsafe { slice::from_raw_parts_mut(NonNull::dangling().as_ptr(), 0) }
} else {
unsafe { slice::from_raw_parts_mut(self.get_ptr(0) as _, self.len) }
}
}
}
unsafe impl<T: Send> Send for Vec<T> {}
unsafe impl<T: Sync> Sync for Vec<T> {}