From 3ffb1a8cbdf3b986965b51c16c540f4e6d793010 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Wed, 15 Jan 2025 23:47:43 -0500 Subject: [PATCH] storage: generic title storage allows override paths without '/' appended. Fixes #11299. --- src/storage/generic/SDL_genericstorage.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/storage/generic/SDL_genericstorage.c b/src/storage/generic/SDL_genericstorage.c index 3d3e93025b..b1270a761b 100644 --- a/src/storage/generic/SDL_genericstorage.c +++ b/src/storage/generic/SDL_genericstorage.c @@ -236,10 +236,15 @@ static const SDL_StorageInterface GENERIC_title_iface = { static SDL_Storage *GENERIC_Title_Create(const char *override, SDL_PropertiesID props) { SDL_Storage *result = NULL; - char *basepath = NULL; + if (override != NULL) { - basepath = SDL_strdup(override); + // make sure override has a path separator at the end. If you're not on Windows and used '\\', that's on you. + const size_t slen = SDL_strlen(override); + const bool need_sep = (!slen || ((override[slen-1] != '/') && (override[slen-1] != '\\'))); + if (SDL_asprintf(&basepath, "%s%s", override, need_sep ? "/" : "") == -1) { + return NULL; + } } else { const char *base = SDL_GetBasePath(); basepath = base ? SDL_strdup(base) : NULL;