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:
commit
1388d7a069
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user