Every CVESearch/Get API key

GHSA-rxhx-9fj6-6h2m

enum_map macro can cause UB when `Enum` trait is incorrectly implemented

No scoreFix available

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

Affected packages
PackageAffectedFixed
enum-map
crates.io
2.0.0-2 up to 2.0.2
2.0.2

History

History
RecordedChangedSources
first indexedGitHub 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

MoveEnter Open