RustSec logo

HistoryEditJSON (OSV)

RUSTSEC-2026-0218

Enum trait allows type confusion when manually implemented

Reported
Issued
Package
enum-map (crates.io)
Type
INFO Unsound
Categories
References
Patched
  • >=3.1.0
Unaffected
  • <3.0.0-0.gat.0

Description

Affected versions of this crate did not require the element type of the Array associated type in the Enum trait to match the array's generic parameter V.

This can result in type confusion, and consequently memory corruption, when a manual Enum implementation declares an Array<V> whose elements are not actually of type V:

struct IntentionallyWrong;

impl Enum for IntentionallyWrong {
    type Array<V> = [String; 4];

    fn from_usize(_: usize) -> Self {
        IntentionallyWrong
    }

    fn into_usize(self) -> usize {
        0
    }
}

enum_map! { IntentionallyWrong => 42 };

The flaw was corrected in commit 7a8b815432 by adding a Value = V bound to the Array type in the Enum trait.

Advisory available under CC0-1.0 license.