mirror of
				https://github.com/Ryujinx/SDL.git
				synced 2025-11-04 10:34:56 +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 Uint32 SDL_HIDAPI_change_count = 0;
 | 
			
		||||
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 SDL_bool SDL_HIDAPI_combine_joycons = SDL_TRUE;
 | 
			
		||||
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) {
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    device->magic = &SDL_HIDAPI_device_magic;
 | 
			
		||||
    device->path = SDL_strdup(info->path);
 | 
			
		||||
    if (!device->path) {
 | 
			
		||||
        SDL_free(device);
 | 
			
		||||
| 
						 | 
				
			
			@ -962,6 +964,7 @@ static void HIDAPI_DelDevice(SDL_HIDAPI_Device *device)
 | 
			
		|||
                device->children[i]->parent = NULL;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            device->magic = NULL;
 | 
			
		||||
            SDL_DestroyMutex(device->dev_lock);
 | 
			
		||||
            SDL_free(device->serial);
 | 
			
		||||
            SDL_free(device->name);
 | 
			
		||||
| 
						 | 
				
			
			@ -1438,7 +1441,7 @@ static SDL_bool HIDAPI_GetJoystickDevice(SDL_Joystick *joystick, SDL_HIDAPI_Devi
 | 
			
		|||
 | 
			
		||||
    if (joystick && joystick->hwdata) {
 | 
			
		||||
        *device = joystick->hwdata->device;
 | 
			
		||||
        if (*device && (*device)->driver) {
 | 
			
		||||
        if (*device && (*device)->magic == &SDL_HIDAPI_device_magic && (*device)->driver != NULL) {
 | 
			
		||||
            return SDL_TRUE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,6 +56,7 @@ struct _SDL_HIDAPI_DeviceDriver;
 | 
			
		|||
 | 
			
		||||
typedef struct _SDL_HIDAPI_Device
 | 
			
		||||
{
 | 
			
		||||
    const void *magic;
 | 
			
		||||
    char *name;
 | 
			
		||||
    char *path;
 | 
			
		||||
    Uint16 vendor_id;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue