Skip to content

Commit 2bdd66a

Browse files
authored
Remove potential panic in split_init (#1184)
1 parent 8adb366 commit 2bdd66a

1 file changed

Lines changed: 7 additions & 4 deletions

File tree

src/buffer.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@ use core::slice;
99
///
1010
/// # Safety
1111
///
12-
/// At least `init` bytes must be initialized.
12+
/// At least `init_len` bytes must be initialized.
1313
#[inline]
1414
pub(super) unsafe fn split_init(
1515
buf: &mut [MaybeUninit<u8>],
16-
init: usize,
16+
init_len: usize,
1717
) -> (&mut [u8], &mut [MaybeUninit<u8>]) {
18-
let (init, uninit) = buf.split_at_mut(init);
19-
let init = slice::from_raw_parts_mut(init.as_mut_ptr().cast::<u8>(), init.len());
18+
debug_assert!(init_len <= buf.len());
19+
let buf_ptr = buf.as_mut_ptr();
20+
let uninit_len = buf.len() - init_len;
21+
let init = slice::from_raw_parts_mut(buf_ptr.cast::<u8>(), init_len);
22+
let uninit = slice::from_raw_parts_mut(buf_ptr.add(init_len), uninit_len);
2023
(init, uninit)
2124
}

0 commit comments

Comments
 (0)