diff --git a/src/joystick/SDL_gamepad.c b/src/joystick/SDL_gamepad.c index 25a850fef5..50660a6ec7 100644 --- a/src/joystick/SDL_gamepad.c +++ b/src/joystick/SDL_gamepad.c @@ -1401,6 +1401,8 @@ static char *SDL_PrivateGetGamepadNameFromMappingString(const char *pMapping) static char *SDL_PrivateGetGamepadMappingFromMappingString(const char *pMapping) { const char *pFirstComma, *pSecondComma; + char *result; + size_t length; pFirstComma = SDL_strchr(pMapping, ','); if (pFirstComma == NULL) { @@ -1412,7 +1414,24 @@ static char *SDL_PrivateGetGamepadMappingFromMappingString(const char *pMapping) return NULL; } - return SDL_strdup(pSecondComma + 1); /* mapping is everything after the 3rd comma */ + /* Skip whitespace */ + while (SDL_isspace(pSecondComma[1])) { + ++pSecondComma; + } + if (pSecondComma[1] == '\0') { + return NULL; + } + + result = SDL_strdup(pSecondComma + 1); /* mapping is everything after the 3rd comma */ + + /* Trim whitespace */ + length = SDL_strlen(result); + while (SDL_isspace(result[length - 1])) { + --length; + } + result[length] = '\0'; + + return result; } /*