diff --git a/src/buf/buf_mut.rs b/src/buf/buf_mut.rs index fb3623d25..fb00bdf11 100644 --- a/src/buf/buf_mut.rs +++ b/src/buf/buf_mut.rs @@ -1034,15 +1034,15 @@ unsafe impl BufMut for Vec { #[inline] fn bytes_mut(&mut self) -> &mut UninitSlice { - if self.capacity() == self.len() { + let len = self.len(); + if self.capacity() == len { self.reserve(64); // Grow the vec } let cap = self.capacity(); - let len = self.len(); let ptr = self.as_mut_ptr(); - unsafe { &mut UninitSlice::from_raw_parts_mut(ptr, cap)[len..] } + unsafe { UninitSlice::from_raw_parts_mut(ptr.add(len), cap - len) } } // Specialize these methods so they can skip checking `remaining_mut` @@ -1069,6 +1069,7 @@ unsafe impl BufMut for Vec { } } + #[inline] fn put_slice(&mut self, src: &[u8]) { self.extend_from_slice(src); }