Skip to content

Commit e8b610f

Browse files
committed
Fix unchecked indexing in from_slice_with_buffers
1 parent fdfb121 commit e8b610f

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/lib.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -479,11 +479,14 @@ impl<'de> Deserializer<'de> {
479479
}
480480

481481
unsafe {
482-
input_buffer
483-
.as_mut_slice()
484-
.get_kinda_unchecked_mut(..len)
485-
.clone_from_slice(input);
486-
*(input_buffer.get_kinda_unchecked_mut(len)) = 0;
482+
std::ptr::copy_nonoverlapping(
483+
input.as_ptr(),
484+
input_buffer.as_mut_ptr(),
485+
len,
486+
);
487+
488+
input_buffer.as_mut_ptr().add(len).write(0);
489+
487490
input_buffer.set_len(len);
488491
};
489492

@@ -717,15 +720,16 @@ impl AlignedBuf {
717720
}
718721
}
719722

723+
fn as_mut_ptr(&mut self) -> *mut u8 {
724+
self.inner.as_ptr()
725+
}
726+
720727
fn capacity_overflow() -> ! {
721728
panic!("capacity overflow");
722729
}
723730
fn capacity(&self) -> usize {
724731
self.capacity
725732
}
726-
fn as_mut_slice(&mut self) -> &mut [u8] {
727-
unsafe { std::slice::from_raw_parts_mut(self.inner.as_ptr(), self.len) }
728-
}
729733
unsafe fn set_len(&mut self, n: usize) {
730734
assert!(
731735
n <= self.capacity,

0 commit comments

Comments
 (0)