From dfc5e6964eca0a0813768518d08cf1c80136e896 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
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
---
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 dc9d7c3653de..24efb93979be 100644
--- a/src/joystick/windows/SDL_rawinputjoystick.c
+++ b/src/joystick/windows/SDL_rawinputjoystick.c
@@ -1105,8 +1105,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;
@@ -2028,8 +2033,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;
@@ -2050,6 +2059,10 @@ int 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];