Auto merge of #122761 - jwong101:fix/vec-insert, r=workingjubilee,Nilstrieb

fix OOB pointer formed in Vec::index

Move the length check to before using `index` with `ptr::add` to prevent an out of bounds pointer from being formed.

Fixes #122760
This commit is contained in:
bors 2024-03-20 21:37:30 +00:00
commit 1388d7a069

View File

@ -1541,6 +1541,9 @@ fn assert_failed(index: usize, len: usize) -> ! {
} }
let len = self.len(); let len = self.len();
if index > len {
assert_failed(index, len);
}
// space for the new element // space for the new element
if len == self.buf.capacity() { if len == self.buf.capacity() {
@ -1556,10 +1559,6 @@ fn assert_failed(index: usize, len: usize) -> ! {
// Shift everything over to make space. (Duplicating the // Shift everything over to make space. (Duplicating the
// `index`th element into two consecutive places.) // `index`th element into two consecutive places.)
ptr::copy(p, p.add(1), len - index); ptr::copy(p, p.add(1), len - index);
} else if index == len {
// No elements need shifting.
} else {
assert_failed(index, len);
} }
// Write it in, overwriting the first copy of the `index`th // Write it in, overwriting the first copy of the `index`th
// element. // element.