GHSA-rxhx-9fj6-6h2m
enum_map macro can cause UB when `Enum` trait is incorrectly implemented
Affected versions of this crate did not properly check the length of an enum when using enum_map! macro, trusting user-provided length.
When the LENGTH in the Enum trait does not match the array length in the EnumArray trait, this can result in the initialization of the enum map with uninitialized types, which in turn can allow an attacker to execute arbitrary code.
This problem can only occur with a manual implementation of the Enum trait, it will never occur for enums that use #[derive(Enum)].
Example code that triggers this vulnerability looks like this:
enum E {
A,
B,
C,
}
impl Enum for E {
const LENGTH: usize = 2;
fn from_usize(value: usize) -> E {
match value {
0 => E::A,
1 => E::B,
2 => E::C,
_ => unimplemented!(),
}
}
fn into_usize(self) -> usize {
self as usize
}
}
impl<V> EnumArray<V> for E {
type Array = [V; 3];
}
let _map: EnumMap<E, String> = enum_map! { _ => "Hello, world!".into() };
The flaw was corrected in commit b824e23 by putting LENGTH property on sealed trait for macro to read.
What each source reports
GitHub AdvisoriesNo score
enum_map macro can cause UB when `Enum` trait is incorrectly implemented
Affected versions of this crate did not properly check the length of an enum when using enum_map! macro, trusting user-provided length.
When the LENGTH in the Enum trait does not match the array length in the EnumArray trait, this can result in the initialization of the enum map with uninitialized types, which in turn can allow an attacker to execute arbitrary code.
This problem can only occur with a manual implementation of the Enum trait, it will never occur for enums that use #[derive(Enum)].
Example code that triggers this vulnerability looks like this:
enum E {
A,
B,
C,
}
impl Enum for E {
const LENGTH: usize = 2;
fn from_usize(value: usize) -> E {
match value {
0 => E::A,
1 => E::B,
2 => E::C,
_ => unimplemented!(),
}
}
fn into_usize(self) -> usize {
self as usize
}
}
impl<V> EnumArray<V> for E {
type Array = [V; 3];
}
let _map: EnumMap<E, String> = enum_map! { _ => "Hello, world!".into() };
The flaw was corrected in commit b824e23 by putting LENGTH property on sealed trait for macro to read.
- Record
GHSA-rxhx-9fj6-6h2m- Updated
- 2026-11-02
OSVNo score
enum_map macro can cause UB when `Enum` trait is incorrectly implemented
Affected versions of this crate did not properly check the length of an enum when using enum_map! macro, trusting user-provided length.
When the LENGTH in the Enum trait does not match the array length in the EnumArray trait, this can result in the initialization of the enum map with uninitialized types, which in turn can allow an attacker to execute arbitrary code.
This problem can only occur with a manual implementation of the Enum trait, it will never occur for enums that use #[derive(Enum)].
Example code that triggers this vulnerability looks like this:
enum E {
A,
B,
C,
}
impl Enum for E {
const LENGTH: usize = 2;
fn from_usize(value: usize) -> E {
match value {
0 => E::A,
1 => E::B,
2 => E::C,
_ => unimplemented!(),
}
}
fn into_usize(self) -> usize {
self as usize
}
}
impl<V> EnumArray<V> for E {
type Array = [V; 3];
}
let _map: EnumMap<E, String> = enum_map! { _ => "Hello, world!".into() };
The flaw was corrected in commit b824e23 by putting LENGTH property on sealed trait for macro to read.
- Record
GHSA-rxhx-9fj6-6h2m- Updated
- 2026-11-02
OSVRUSTSEC-2022-0010No score
enum_map macro can cause UB when `Enum` trait is incorrectly implemented
Affected versions of this crate did not properly check the length of an enum when using enum_map! macro, trusting user-provided length.
When the LENGTH in the Enum trait does not match the array length in the EnumArray trait, this can result in the initialization of the enum map with uninitialized types, which in turn can allow an attacker to execute arbitrary code.
This problem can only occur with a manual implementation of the Enum trait, it will never occur for enums that use #[derive(Enum)].
Example code that triggers this vulnerability looks like this:
enum E {
A,
B,
C,
}
impl Enum for E {
const LENGTH: usize = 2;
fn from_usize(value: usize) -> E {
match value {
0 => E::A,
1 => E::B,
2 => E::C,
_ => unimplemented!(),
}
}
fn into_usize(self) -> usize {
self as usize
}
}
impl<V> EnumArray<V> for E {
type Array = [V; 3];
}
let _map: EnumMap<E, String> = enum_map! { _ => "Hello, world!".into() };
The flaw was corrected in commit b824e23 by putting LENGTH property on sealed trait for macro to read.
- Record
RUSTSEC-2022-0010- Updated
- 2026-11-02
Affected packages
| Package | Affected | Fixed |
|---|---|---|
enum-mapcrates.io | 2.0.0-2 up to 2.0.2 | 2.0.2 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | GitHub Advisories, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
GHSA-rxhx-9fj6-6h2m is a vulnerability with no CVSS score yet in enum-map, published February 17, 2022. No source lists public exploit code. Fixed in enum-map 2.0.2.
References
github.com/rustsec/advisory-db/blob/main/crates/enum-map/RUSTSEC-2022-0010.md
rustsec.org/advisories/RUSTSEC-2022-0010.html
github.com/xfix/enum-map/commit/b824e232f2fb47837740070096ac253df8e80dfc
github.com/xfix/enum-map/blob/master/CHANGELOG.md
gitlab.com/KonradBorowski/enum-map/-/blob/master/CHANGELOG.md
github.com/advisories/GHSA-rxhx-9fj6-6h2m
github.com/xfix/enum-map
crates.io/crates/enum-map