Browse Source

Windows: Fix SDL_GetBasePath() truncating paths

SDL_GetBasePath grows its path buffer for long paths, but GetModuleFileNameExW always truncates and succeeds,
so `len` was always equal to (buflen - 1) which is 127. This is easily fixed by checking for (buflen - 1) instead of buflen.
For paths longer than MAX_PATH, this problem sometimes got hidden by Windows path shortening ("C:\PROGRA~1\" etc.).

Tested on Windows 10 x64 19041 and 10586.
Phillip Trudeau 3 years ago
parent
commit
bc7ac134db
1 changed files with 3 additions and 1 deletions
  1. 3 1
      src/filesystem/windows/SDL_sysfilesystem.c

+ 3 - 1
src/filesystem/windows/SDL_sysfilesystem.c

@@ -68,7 +68,9 @@ SDL_GetBasePath(void)
         path = (WCHAR *) ptr;
 
         len = pGetModuleFileNameExW(GetCurrentProcess(), NULL, path, buflen);
-        if (len != buflen) {
+        /* if it truncated, then len >= buflen - 1 */
+        /* if there was enough room (or failure), len < buflen - 1 */
+        if (len < buflen - 1) {
             break;
         }