1
Fork 0

Prevent invalid values from existing in Vec::swap_remove

This commit is contained in:
Giacomo Stevanato 2021-10-20 15:42:54 +02:00
commit 0aa68a8db9

View file

@ -1305,10 +1305,11 @@ impl<T, A: Allocator> Vec<T, A> {
// We replace self[index] with the last element. Note that if the // We replace self[index] with the last element. Note that if the
// bounds check above succeeds there must be a last element (which // bounds check above succeeds there must be a last element (which
// can be self[index] itself). // can be self[index] itself).
let last = ptr::read(self.as_ptr().add(len - 1)); let value = ptr::read(self.as_ptr().add(index));
let hole = self.as_mut_ptr().add(index); let base_ptr = self.as_mut_ptr();
ptr::copy(base_ptr.add(len - 1), base_ptr.add(index), 1);
self.set_len(len - 1); self.set_len(len - 1);
ptr::replace(hole, last) value
} }
} }