From fc17f7033fe3e5edd665ea00010ece6c020746e0 Mon Sep 17 00:00:00 2001 From: Ferdinand Schober Date: Tue, 25 Jun 2024 13:49:51 +0200 Subject: [PATCH] fix transmuting to pointer types UB --- src/capture/windows.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/capture/windows.rs b/src/capture/windows.rs index 8cba14a..cd93bf5 100644 --- a/src/capture/windows.rs +++ b/src/capture/windows.rs @@ -96,8 +96,7 @@ unsafe fn get_event_tid() -> Option { static mut ENTRY_POINT: (i32, i32) = (0, 0); fn to_mouse_event(wparam: WPARAM, lparam: LPARAM) -> Option { - let mouse_low_level: MSLLHOOKSTRUCT = - unsafe { *std::mem::transmute::(lparam) }; + let mouse_low_level: MSLLHOOKSTRUCT = unsafe { *(lparam.0 as *const MSLLHOOKSTRUCT) }; match wparam { WPARAM(p) if p == WM_LBUTTONDOWN as usize => Some(PointerEvent::Button { time: 0, @@ -167,8 +166,7 @@ fn to_mouse_event(wparam: WPARAM, lparam: LPARAM) -> Option { } unsafe fn to_key_event(wparam: WPARAM, lparam: LPARAM) -> Option { - let kybrdllhookstruct: KBDLLHOOKSTRUCT = - *std::mem::transmute::(lparam); + let kybrdllhookstruct: KBDLLHOOKSTRUCT = *(lparam.0 as *const KBDLLHOOKSTRUCT); let mut scan_code = kybrdllhookstruct.scanCode; log::trace!("scan_code: {scan_code}"); if kybrdllhookstruct.flags.contains(LLKHF_EXTENDED) { @@ -247,8 +245,7 @@ unsafe fn check_client_activation(wparam: WPARAM, lparam: LPARAM) -> bool { if wparam.0 != WM_MOUSEMOVE as usize { return ACTIVE_CLIENT.is_some(); } - let mouse_low_level: MSLLHOOKSTRUCT = - unsafe { *std::mem::transmute::(lparam) }; + let mouse_low_level: MSLLHOOKSTRUCT = *(lparam.0 as *const MSLLHOOKSTRUCT); static mut PREV_POS: Option<(i32, i32)> = None; let curr_pos = (mouse_low_level.pt.x, mouse_low_level.pt.y); let prev_pos = PREV_POS.unwrap_or(curr_pos);