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,13 +162,21 @@ impl<T> Deref for Vec<T> {
type Target = [T];
fn deref(&self) -> &Self::Target {
unsafe { slice::from_raw_parts(self.get_ptr(0), self.len) }
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 {
unsafe { slice::from_raw_parts_mut(self.get_ptr(0) as _, self.len) }
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) }
}
}
}