Several methods in circular-buffer drop elements before updating the buffer's start/end metadata. If an element's Drop panics during the drop, the metadata update is skipped, so the buffer still treats the already-dropped elements as live. When the buffer is later dropped (or used after the panic is caught), those elements are visited again — a use-after-free / double-free reachable from safe Rust.
Drop.Reachable entirely from safe Rust via catch_unwind with element types whose Drop can panic.
Fixed in circular-buffer 2.0.1 by adjusting the buffer's start/end metadata before the elements are dropped.
{
"license": "CC0-1.0"
}{
"affected_functions": null,
"affects": {
"os": [],
"functions": [
"circular_buffer::CircularBuffer::clear",
"circular_buffer::CircularBuffer::extend_from_slice",
"circular_buffer::CircularBuffer::truncate_back",
"circular_buffer::CircularBuffer::truncate_front"
],
"arch": []
}
}