From 8b6224fdc46eaa59953fdec11a846f2b41231120 Mon Sep 17 00:00:00 2001 From: Paolo Barbolini Date: Sat, 25 Jan 2025 11:34:55 +0100 Subject: [PATCH] fix: usage of `BytesMut` in `extend_buf_sync` --- src/stream/buf_reader.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/stream/buf_reader.rs b/src/stream/buf_reader.rs index e6c27629..79696096 100644 --- a/src/stream/buf_reader.rs +++ b/src/stream/buf_reader.rs @@ -358,19 +358,18 @@ where R: Read, { let size = 8 * 1024; - if !buf.has_remaining_mut() { + if buf.capacity() == buf.len() { buf.reserve(size); } // Copy of tokio's poll_read_buf method (but it has to force initialize the buffer) let n = { - let bs = buf.chunk_mut(); + let bs = buf.spare_capacity_mut(); let initial_size = bs.len().min(size); let bs = &mut bs[..initial_size]; - for i in 0..bs.len() { - bs.write_byte(i, 0); - } + // SAFETY: the above slicing operation guarantees `bs.len() == initial_size` + unsafe { bs.as_mut_ptr().cast::().write_bytes(0, initial_size) } // Convert to `&mut [u8]` // SAFETY: the entire buffer is preinitialized above