Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bug: undefined behavior when transmuting u32 to various enums #1388

Open
antonilol opened this issue Apr 23, 2024 · 0 comments
Open

bug: undefined behavior when transmuting u32 to various enums #1388

antonilol opened this issue Apr 23, 2024 · 0 comments
Labels

Comments

@antonilol
Copy link
Contributor

antonilol commented Apr 23, 2024

in several places in the code a u32 is transmuted to enums without any checks. examples include

Ok(match unsafe { transmute(n) } {
,
Ok(match unsafe { transmute(n) } {
and
Ok(match unsafe { transmute(n) } {
.

these TryInto implementations are public so this can be easily demonstrated by using miri with the code let b: BlendMode = 3.try_into() (this calls <BlendMode as TryFrom<u32>>::try_from(3) with the invalid value 3) for example:

error: Undefined Behavior: constructing invalid value at .<enum-tag>: encountered 0x00000003, but expected a valid enum tag
   --> /home/antoni/.cargo/registry/src/index.crates.io-6f17d22bba15001f/sdl2-0.36.0/src/sdl2/render.rs:172:27
    |
172 |         Ok(match unsafe { transmute(n) } {
    |                           ^^^^^^^^^^^^ constructing invalid value at .<enum-tag>: encountered 0x00000003, but expected a valid enum tag
    |
    = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
    = help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information
    = note: BACKTRACE:
    = note: inside `<sdl2::render::BlendMode as std::convert::TryFrom<u32>>::try_from` at /home/antoni/.cargo/registry/src/index.crates.io-6f17d22bba15001f/sdl2-0.36.0/src/sdl2/render.rs:172:27: 172:39
    = note: inside `<u32 as std::convert::TryInto<sdl2::render::BlendMode>>::try_into` at /home/antoni/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/convert/mod.rs:798:9: 798:26
@Cobrand Cobrand added the bug label Apr 24, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants