Skip to content

Commit b69c124

Browse files
committed
Fix potential overflow in TrustedRandomAccess impl for slice::{Chunks,ChunksMut}
1 parent 3f29e2b commit b69c124

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/libcore/slice/mod.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -2240,7 +2240,10 @@ impl<'a, T> FusedIterator for Chunks<'a, T> {}
22402240
unsafe impl<'a, T> TrustedRandomAccess for Chunks<'a, T> {
22412241
unsafe fn get_unchecked(&mut self, i: usize) -> &'a [T] {
22422242
let start = i * self.chunk_size;
2243-
let end = cmp::min(start + self.chunk_size, self.v.len());
2243+
let end = match start.checked_add(self.chunk_size) {
2244+
None => self.v.len(),
2245+
Some(end) => cmp::min(end, self.v.len()),
2246+
};
22442247
from_raw_parts(self.v.as_ptr().offset(start as isize), end - start)
22452248
}
22462249
fn may_have_side_effect() -> bool { false }
@@ -2353,7 +2356,10 @@ impl<'a, T> FusedIterator for ChunksMut<'a, T> {}
23532356
unsafe impl<'a, T> TrustedRandomAccess for ChunksMut<'a, T> {
23542357
unsafe fn get_unchecked(&mut self, i: usize) -> &'a mut [T] {
23552358
let start = i * self.chunk_size;
2356-
let end = cmp::min(start + self.chunk_size, self.v.len());
2359+
let end = match start.checked_add(self.chunk_size) {
2360+
None => self.v.len(),
2361+
Some(end) => cmp::min(end, self.v.len()),
2362+
};
23572363
from_raw_parts_mut(self.v.as_mut_ptr().offset(start as isize), end - start)
23582364
}
23592365
fn may_have_side_effect() -> bool { false }

0 commit comments

Comments
 (0)