From 9117b2e3000da4d9066dd5f2cfb1c9cbbbee6861 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 11 Jul 2023 10:17:02 -0700 Subject: [PATCH] Fixed crash if RAWINPUT is not initialized We shouldn't be doing any of this work in that case (cherry picked from commit dfc5e6964eca0a0813768518d08cf1c80136e896) --- src/joystick/windows/SDL_rawinputjoystick.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/joystick/windows/SDL_rawinputjoystick.c b/src/joystick/windows/SDL_rawinputjoystick.c index 22a9b4efb..b9ab6c017 100644 --- a/src/joystick/windows/SDL_rawinputjoystick.c +++ b/src/joystick/windows/SDL_rawinputjoystick.c @@ -1102,8 +1102,13 @@ static void RAWINPUT_PostUpdate(void) static void RAWINPUT_JoystickDetect(void) { - SDL_bool remote_desktop = GetSystemMetrics(SM_REMOTESESSION) ? SDL_TRUE : SDL_FALSE; + SDL_bool remote_desktop; + if (!SDL_RAWINPUT_inited) { + return; + } + + remote_desktop = GetSystemMetrics(SM_REMOTESESSION) ? SDL_TRUE : SDL_FALSE; if (remote_desktop != SDL_RAWINPUT_remote_desktop) { SDL_RAWINPUT_remote_desktop = remote_desktop; @@ -2008,8 +2013,12 @@ static void RAWINPUT_JoystickClose(SDL_Joystick *joystick) SDL_bool RAWINPUT_RegisterNotifications(HWND hWnd) { - RAWINPUTDEVICE rid[SDL_arraysize(subscribed_devices)]; int i; + RAWINPUTDEVICE rid[SDL_arraysize(subscribed_devices)]; + + if (!SDL_RAWINPUT_inited) { + return SDL_TRUE; + } for (i = 0; i < SDL_arraysize(subscribed_devices); i++) { rid[i].usUsagePage = USB_USAGEPAGE_GENERIC_DESKTOP; @@ -2030,6 +2039,10 @@ void RAWINPUT_UnregisterNotifications() int i; RAWINPUTDEVICE rid[SDL_arraysize(subscribed_devices)]; + if (!SDL_RAWINPUT_inited) { + return SDL_TRUE; + } + for (i = 0; i < SDL_arraysize(subscribed_devices); i++) { rid[i].usUsagePage = USB_USAGEPAGE_GENERIC_DESKTOP; rid[i].usUsage = subscribed_devices[i];