diff options
author | 2020-10-19 15:48:23 -0700 | |
---|---|---|
committer | 2020-10-19 15:48:23 -0700 | |
commit | e0d8413d53e3774177b040a4f9adda40ec15ce8f (patch) | |
tree | 96c2caf27aa9a19127baa414dd3470d20b49d4ee /src/bytes_mut.rs | |
parent | 5a11c783ecf7c308e7b145f56d5c05e635b99269 (diff) | |
download | bytes-e0d8413d53e3774177b040a4f9adda40ec15ce8f.tar.gz bytes-e0d8413d53e3774177b040a4f9adda40ec15ce8f.tar.zst bytes-e0d8413d53e3774177b040a4f9adda40ec15ce8f.zip |
Switch `BufMut::bytes_mut` to`&mut UninitSlice` (#433)
The way BufMut uses MaybeUninit can lead to unsoundness. This replaces
MaybeUnit with a type owned by bytes so we can ensure the usage patterns
are sound.
Refs: #328
Diffstat (limited to 'src/bytes_mut.rs')
-rw-r--r-- | src/bytes_mut.rs | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/bytes_mut.rs b/src/bytes_mut.rs index 16cb72c..38f1ed5 100644 --- a/src/bytes_mut.rs +++ b/src/bytes_mut.rs @@ -11,7 +11,7 @@ use alloc::{ vec::Vec, }; -use crate::buf::IntoIter; +use crate::buf::{IntoIter, UninitSlice}; use crate::bytes::Vtable; #[allow(unused)] use crate::loom::sync::atomic::AtomicMut; @@ -684,7 +684,7 @@ impl BytesMut { self.reserve(cnt); unsafe { - let dst = self.maybe_uninit_bytes(); + let dst = self.uninit_slice(); // Reserved above debug_assert!(dst.len() >= cnt); @@ -910,12 +910,12 @@ impl BytesMut { } #[inline] - fn maybe_uninit_bytes(&mut self) -> &mut [mem::MaybeUninit<u8>] { + fn uninit_slice(&mut self) -> &mut UninitSlice { unsafe { let ptr = self.ptr.as_ptr().offset(self.len as isize); let len = self.cap - self.len; - slice::from_raw_parts_mut(ptr as *mut mem::MaybeUninit<u8>, len) + UninitSlice::from_raw_parts_mut(ptr, len) } } } @@ -985,11 +985,11 @@ unsafe impl BufMut for BytesMut { } #[inline] - fn bytes_mut(&mut self) -> &mut [mem::MaybeUninit<u8>] { + fn bytes_mut(&mut self) -> &mut UninitSlice { if self.capacity() == self.len() { self.reserve(64); } - self.maybe_uninit_bytes() + self.uninit_slice() } // Specialize these methods so they can skip checking `remaining_mut` |