mirror of
https://github.com/Ryujinx/SDL.git
synced 2025-06-13 03:15:32 +00:00
More defensive coding against dangling device pointers
(cherry picked from commit acadb6f873acaa0de094ad10a88f877d540ce0ec)
This commit is contained in:
parent
6d7269815b
commit
7ec9a4385a
|
@ -92,6 +92,7 @@ static SDL_SpinLock SDL_HIDAPI_spinlock;
|
||||||
static SDL_bool SDL_HIDAPI_hints_changed = SDL_FALSE;
|
static SDL_bool SDL_HIDAPI_hints_changed = SDL_FALSE;
|
||||||
static Uint32 SDL_HIDAPI_change_count = 0;
|
static Uint32 SDL_HIDAPI_change_count = 0;
|
||||||
static SDL_HIDAPI_Device *SDL_HIDAPI_devices SDL_GUARDED_BY(SDL_joystick_lock);
|
static SDL_HIDAPI_Device *SDL_HIDAPI_devices SDL_GUARDED_BY(SDL_joystick_lock);
|
||||||
|
static char SDL_HIDAPI_device_magic;
|
||||||
static int SDL_HIDAPI_numjoysticks = 0;
|
static int SDL_HIDAPI_numjoysticks = 0;
|
||||||
static SDL_bool SDL_HIDAPI_combine_joycons = SDL_TRUE;
|
static SDL_bool SDL_HIDAPI_combine_joycons = SDL_TRUE;
|
||||||
static SDL_bool initialized = SDL_FALSE;
|
static SDL_bool initialized = SDL_FALSE;
|
||||||
|
@ -851,6 +852,7 @@ static SDL_HIDAPI_Device *HIDAPI_AddDevice(const struct SDL_hid_device_info *inf
|
||||||
if (device == NULL) {
|
if (device == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
device->magic = &SDL_HIDAPI_device_magic;
|
||||||
device->path = SDL_strdup(info->path);
|
device->path = SDL_strdup(info->path);
|
||||||
if (!device->path) {
|
if (!device->path) {
|
||||||
SDL_free(device);
|
SDL_free(device);
|
||||||
|
@ -962,6 +964,7 @@ static void HIDAPI_DelDevice(SDL_HIDAPI_Device *device)
|
||||||
device->children[i]->parent = NULL;
|
device->children[i]->parent = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
device->magic = NULL;
|
||||||
SDL_DestroyMutex(device->dev_lock);
|
SDL_DestroyMutex(device->dev_lock);
|
||||||
SDL_free(device->serial);
|
SDL_free(device->serial);
|
||||||
SDL_free(device->name);
|
SDL_free(device->name);
|
||||||
|
@ -1438,7 +1441,7 @@ static SDL_bool HIDAPI_GetJoystickDevice(SDL_Joystick *joystick, SDL_HIDAPI_Devi
|
||||||
|
|
||||||
if (joystick && joystick->hwdata) {
|
if (joystick && joystick->hwdata) {
|
||||||
*device = joystick->hwdata->device;
|
*device = joystick->hwdata->device;
|
||||||
if (*device && (*device)->driver) {
|
if (*device && (*device)->magic == &SDL_HIDAPI_device_magic && (*device)->driver != NULL) {
|
||||||
return SDL_TRUE;
|
return SDL_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,6 +56,7 @@ struct _SDL_HIDAPI_DeviceDriver;
|
||||||
|
|
||||||
typedef struct _SDL_HIDAPI_Device
|
typedef struct _SDL_HIDAPI_Device
|
||||||
{
|
{
|
||||||
|
const void *magic;
|
||||||
char *name;
|
char *name;
|
||||||
char *path;
|
char *path;
|
||||||
Uint16 vendor_id;
|
Uint16 vendor_id;
|
||||||
|
|
Loading…
Reference in a new issue