From c0443e5d1256726126cb78f916548c46ea3362ff Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Mon, 18 Sep 2023 09:47:57 -0700
Subject: [PATCH] Fixed crash in SDL_IMMDevice_FindByDevID()
Either devid or handle->immdevice_id was NULL, crashing SDL_wcscmp()
---
src/core/windows/SDL_immdevice.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/core/windows/SDL_immdevice.c b/src/core/windows/SDL_immdevice.c
index 160297e3879f..780eff40ddd9 100644
--- a/src/core/windows/SDL_immdevice.c
+++ b/src/core/windows/SDL_immdevice.c
@@ -57,8 +57,14 @@ static const PROPERTYKEY SDL_PKEY_AudioEndpoint_GUID = { { 0x1da5d803, 0xd492, 0
static SDL_bool FindByDevIDCallback(SDL_AudioDevice *device, void *userdata)
{
- const SDL_IMMDevice_HandleData *handle = (const SDL_IMMDevice_HandleData *) device->handle;
- return (SDL_wcscmp(handle->immdevice_id, (LPCWSTR) userdata) == 0) ? SDL_TRUE : SDL_FALSE;
+ LPCWSTR devid = (LPCWSTR)userdata;
+ if (devid && device && device->handle) {
+ const SDL_IMMDevice_HandleData *handle = (const SDL_IMMDevice_HandleData *)device->handle;
+ if (handle->immdevice_id && SDL_wcscmp(handle->immdevice_id, devid) == 0) {
+ return SDL_TRUE;
+ }
+ }
+ return SDL_FALSE;
}
static SDL_AudioDevice *SDL_IMMDevice_FindByDevID(LPCWSTR devid)