Skip to content

Commit

Permalink
Fixed bug 5155 - HIDAPI_JoystickDisconnected incorrect array shift
Browse files Browse the repository at this point in the history
Anthony Pesch

I was looking into my own input bug and noticed an issue in the HIDAPI code while looking over it. I don't have a controller that goes down this path to test and try to provoke the issue, but it looks pretty straight forward.

The memmove to shift the joystick id array on disconnect isn't scaling the size by sizeof(SDL_JoystickID), likely corrupting the ids on disconnect.
  • Loading branch information
slouken committed May 30, 2020
1 parent a8400dc commit d000c1c
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/joystick/hidapi/SDL_hidapijoystick.c
Expand Up @@ -631,7 +631,7 @@ HIDAPI_JoystickConnected(SDL_HIDAPI_Device *device, SDL_JoystickID *pJoystickID,
void
HIDAPI_JoystickDisconnected(SDL_HIDAPI_Device *device, SDL_JoystickID joystickID, SDL_bool is_external)
{
int i;
int i, size;

for (i = 0; i < device->num_joysticks; ++i) {
if (device->joysticks[i] == joystickID) {
Expand All @@ -640,8 +640,10 @@ HIDAPI_JoystickDisconnected(SDL_HIDAPI_Device *device, SDL_JoystickID joystickID
HIDAPI_JoystickClose(joystick);
}

SDL_memmove(&device->joysticks[i], &device->joysticks[i+1], device->num_joysticks - i - 1);
size = (device->num_joysticks - i - 1) * sizeof(SDL_JoystickID);
SDL_memmove(&device->joysticks[i], &device->joysticks[i+1], size);
--device->num_joysticks;

if (!is_external) {
--SDL_HIDAPI_numjoysticks;
}
Expand Down

0 comments on commit d000c1c

Please sign in to comment.