IdMap from_iter may lead to uninitialized memory being freed on drop
Moderate severity
GitHub Reviewed
Published
Aug 18, 2025
to the GitHub Advisory Database
•
Updated Aug 18, 2025
Description
Published to the GitHub Advisory Database
Aug 18, 2025
Reviewed
Aug 18, 2025
Last updated
Aug 18, 2025
Due to a flaw in the constructor
id_map::IdMap::from_iter
, ill-formed objects may be created in which the amount of actually initialized memory is less than what is expected by the fields ofIdMap
. Specifically, the fieldids
is initialized based on the capacity of the vectorvalues
, which is constructed from the provided iterator. However, the length of this vector may be smaller than its capacity.In such cases, when the resulting
IdMap
is dropped, its destructor incorrectly assumes thatvalues
containsids.len() == values.capacity()
initialized elements and attempts to iterate over and drop them. This leads to dereferencing and attempting to free uninitialized memory, resulting in undefined behavior and potential segmentation faults.The bug was fixed in commit
fab6922
, and all unsafe code was removed from the crate.Note that the maintainer recommends using the following alternatives:
References