From 7aec9ad4a6d6b5a9f330911e6d6ab2b19d5252bc Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Tue, 18 Jul 2023 13:25:47 -0700
Subject: [PATCH] Make sure the mapping string doesn't have extraneous
whitespace
If that whitespace is extra newlines in the mapping hint, we would create extra empty mapping strings
---
src/joystick/SDL_gamepad.c | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/src/joystick/SDL_gamepad.c b/src/joystick/SDL_gamepad.c
index 25a850fef505..50660a6ec7f0 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;
}
/*