Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Vec backing buffer leaks on panic during into_iter #69770

Closed
RalfJung opened this issue Mar 6, 2020 · 0 comments · Fixed by #69828
Closed

Vec backing buffer leaks on panic during into_iter #69770

RalfJung opened this issue Mar 6, 2020 · 0 comments · Fixed by #69828
Labels
A-collections Area: `std::collections` C-bug Category: This is a bug. T-libs-api Relevant to the library API team, which will review and decide on the PR/issue.

Comments

@RalfJung
Copy link
Member

RalfJung commented Mar 6, 2020

When running the test_into_iter_leak test in Miri, it complains about a memory leak:

note: created allocation with id 228443
   --> /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/liballoc/alloc.rs:81:47
    |
81  |     __rust_alloc(layout.size(), layout.align())
    |                                               ^ created allocation with id 228443
    |
    = note: inside call to `std::alloc::alloc` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/liballoc/alloc.rs:169:22
    = note: inside call to `<std::alloc::Global as std::alloc::AllocRef>::alloc` at /home/r/.rustup/toolchains/miri/lib/rustlib/src/rust/src/liballoc/alloc.rs:203:15
note: inside call to `alloc::alloc::exchange_malloc` at <::alloc::macros::vec macros>:2:46
   --> alloc_miri_test/../liballoc/tests/vec.rs:786:13
    |
786 |     let v = vec![D(false), D(true), D(false)];
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
note: inside call to `vec::test_into_iter_leak` at alloc_miri_test/../liballoc/tests/vec.rs:769:1
   --> alloc_miri_test/../liballoc/tests/vec.rs:769:1
    |
769 | / fn test_into_iter_leak() {
770 | |     static mut DROPS: i32 = 0;
771 | |
772 | |     struct D(bool);
...   |
790 | |     assert_eq!(unsafe { DROPS }, 3);
791 | | }
    | |_^

### LEAK REPORT ###
Alloc 228443: 00 01 00 (3 bytes, alignment 1) (Rust)

Given that the leaked allocation contains "00 01 00", that seems a lot like the backing store of a Vec with initial content D(false), D(true), D(false).

@RalfJung RalfJung added A-collections Area: `std::collections` T-libs-api Relevant to the library API team, which will review and decide on the PR/issue. C-bug Category: This is a bug. labels Mar 6, 2020
@bors bors closed this as completed in 080d413 Mar 11, 2020
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
A-collections Area: `std::collections` C-bug Category: This is a bug. T-libs-api Relevant to the library API team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant