Skip to content

Commit 92ed4e8

Browse files
authored
Fix undefined behavior in CDFContextLogOps
Calling Vec::get_unchecked_mut() with an out-of-bounds index is undefined behavior even if the resulting reference is not used.
1 parent d5fda2d commit 92ed4e8

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

src/context/cdf_context.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -600,7 +600,7 @@ trait CDFContextLogOps: CDFContextLogSize {
600600
let new_len = len + Self::CDF_LEN_MAX + 1;
601601
let capacity = log.data.capacity();
602602
debug_assert!(new_len <= capacity);
603-
let dst = log.data.get_unchecked_mut(len) as *mut u16;
603+
let dst = log.data.as_mut_ptr().add(len);
604604
dst.copy_from_nonoverlapping(cdf.as_ptr(), Self::CDF_LEN_MAX);
605605
*dst.add(Self::CDF_LEN_MAX) = offset as u16;
606606
log.data.set_len(new_len);
@@ -618,7 +618,7 @@ trait CDFContextLogOps: CDFContextLogSize {
618618
// SAFETY: We use unchecked pointers here for performance.
619619
// Since we know the length, we can ensure not to go OOB.
620620
unsafe {
621-
let mut src = log.data.get_unchecked_mut(len) as *mut u16;
621+
let mut src = log.data.as_mut_ptr().add(len);
622622
while len > checkpoint {
623623
len -= Self::CDF_LEN_MAX + 1;
624624
src = src.sub(Self::CDF_LEN_MAX + 1);

0 commit comments

Comments
 (0)