From b23bd946d013d7f53a57b40166518a08627cd882 Mon Sep 17 00:00:00 2001 From: eafton Date: Thu, 2 Oct 2025 21:45:18 +0300 Subject: [PATCH 1/3] Fix for #14067 --- src/joystick/windows/SDL_windowsjoystick.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/joystick/windows/SDL_windowsjoystick.c b/src/joystick/windows/SDL_windowsjoystick.c index 805f8cb6aa467..3a4e6aad73356 100644 --- a/src/joystick/windows/SDL_windowsjoystick.c +++ b/src/joystick/windows/SDL_windowsjoystick.c @@ -583,6 +583,9 @@ static bool WINDOWS_JoystickOpen(SDL_Joystick *joystick, int device_index) static bool WINDOWS_JoystickRumble(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble) { + if (!joystick->hwdata) { + return SDL_SetError("Rumble failed, device disconnected."); + } #ifdef SDL_JOYSTICK_XINPUT if (joystick->hwdata->bXInputDevice) { return SDL_XINPUT_JoystickRumble(joystick, low_frequency_rumble, high_frequency_rumble); @@ -629,6 +632,9 @@ static void WINDOWS_JoystickUpdate(SDL_Joystick *joystick) // Function to close a joystick after use static void WINDOWS_JoystickClose(SDL_Joystick *joystick) { + if (!joystick->hwdata) { + return SDL_SetError("Unable to close joystick, hwdata is NULL."); + } #ifdef SDL_JOYSTICK_XINPUT if (joystick->hwdata->bXInputDevice) { SDL_XINPUT_JoystickClose(joystick); From 37177df68158a540ff0528d03ff1eafbfdf002a3 Mon Sep 17 00:00:00 2001 From: eafton Date: Thu, 2 Oct 2025 21:46:32 +0300 Subject: [PATCH 2/3] Fix for #14067 --- src/joystick/windows/SDL_windowsjoystick.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/joystick/windows/SDL_windowsjoystick.c b/src/joystick/windows/SDL_windowsjoystick.c index 3a4e6aad73356..78c5971d7b456 100644 --- a/src/joystick/windows/SDL_windowsjoystick.c +++ b/src/joystick/windows/SDL_windowsjoystick.c @@ -633,7 +633,7 @@ static void WINDOWS_JoystickUpdate(SDL_Joystick *joystick) static void WINDOWS_JoystickClose(SDL_Joystick *joystick) { if (!joystick->hwdata) { - return SDL_SetError("Unable to close joystick, hwdata is NULL."); + SDL_SetError("Unable to close joystick, hwdata is NULL."); } #ifdef SDL_JOYSTICK_XINPUT if (joystick->hwdata->bXInputDevice) { From e477016722f3cd5f6136945f00600dafa6e125fe Mon Sep 17 00:00:00 2001 From: eafton Date: Thu, 2 Oct 2025 21:48:32 +0300 Subject: [PATCH 3/3] Fix for SDL_windowsjoystick.c --- src/joystick/windows/SDL_windowsjoystick.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/joystick/windows/SDL_windowsjoystick.c b/src/joystick/windows/SDL_windowsjoystick.c index 78c5971d7b456..c423eb1a4484e 100644 --- a/src/joystick/windows/SDL_windowsjoystick.c +++ b/src/joystick/windows/SDL_windowsjoystick.c @@ -634,6 +634,7 @@ static void WINDOWS_JoystickClose(SDL_Joystick *joystick) { if (!joystick->hwdata) { SDL_SetError("Unable to close joystick, hwdata is NULL."); + return; } #ifdef SDL_JOYSTICK_XINPUT if (joystick->hwdata->bXInputDevice) {