obv-mikhail / InputBot

Rust library for creating global hotkeys, and simulating inputs
MIT License
400 stars 72 forks source link

Convert winapi transmute to internal union handling #67

Closed SonicZentropy closed 1 year ago

SonicZentropy commented 1 year ago

Fixes #64

In general, Rust 1.64 added a forced panic to std::mem::transmute_copy if the destination struct is larger than the source, as it is technically UB. InputBot was using this mechanism to convert keyboard or mouse input to the INPUT_u union, which ALWAYS triggers the panic.

This fixes everything as far as I can tell, BUT it is the first unsafe code I've ever written, so please please please don't merge unless someone else is also confident it doesn't explode! This does seem like the intended method the winapi crate wants people to use, though