- Reported
-
- Issued
-
- Package
-
intaglio
(crates.io)
- Type
-
Vulnerability
- References
-
- Patched
-
- Affected Functions
- Version
intaglio::SymbolTable::intern
-
intaglio::bytes::SymbolTable::intern
-
intaglio::cstr::SymbolTable::intern
-
intaglio::osstr::SymbolTable::intern
-
intaglio::path::SymbolTable::intern
-
Description
Affected versions of this crate can leave all SymbolTable variants in an
internally inconsistent state if a custom BuildHasher panics during
HashMap::insert and the caller recovers with catch_unwind.
The intern implementations committed a vec.push(...) before the matching
map.insert(...) completed. If hashing panicked in that window, later lookups
and inserts could observe diverging vec and map lengths.
In release builds, this can lead to symbol confusion where a newly interned
string resolves to previously interned attacker-controlled contents. In debug
builds, the same corruption is detected by follow-up assertions and results in
panics.
The flaw was corrected in version 1.13.3 by making the vec mutation
transactional across unwind boundaries so partially inserted entries are rolled
back before the panic propagates.
Advisory available under CC0-1.0
license.