Browse Source

Fixed crash in SDL_IMMDevice_FindByDevID()

Either devid or handle->immdevice_id was NULL, crashing SDL_wcscmp()
Sam Lantinga 1 year ago
parent
commit
c0443e5d12
1 changed files with 8 additions and 2 deletions
  1. 8 2
      src/core/windows/SDL_immdevice.c

+ 8 - 2
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)