foxygit / doom Log in
commit bec0d85ca98d682c3d922d76309976a3a1359e3c
Author:     Turo Lamminen <turol@users.noreply.github.com>
AuthorDate: Sat Mar 12 14:03:24 2022 +0200
Commit:     GitHub <noreply@github.com>
CommitDate: Sat Mar 12 13:03:24 2022 +0100

    Gracefully handle SDL_GetPrefPath returning NULL (#1450)

    * music: Warn if SDL_GetPrefPath fails and music pack directory can't be set

    * doom: Handle M_GetAutoloadDir returning NULL

    * heretic: Handle M_GetAutoloadDir returning NULL

    * hexen: Handle M_GetAutoloadDir returning NULL

    * strife: Handle M_GetAutoloadDir returning NULL

    * Avoid crash in M_GetAutoloadDir if SDL_GetPrefPath fails
---
 src/doom/d_main.c    | 18 ++++++++++++------
 src/heretic/d_main.c |  9 ++++++---
 src/hexen/h2_main.c  |  9 ++++++---
 src/m_config.c       | 10 ++++++++++
 src/strife/d_main.c  |  9 ++++++---
 5 files changed, 40 insertions(+), 15 deletions(-)

diff --git a/src/doom/d_main.c b/src/doom/d_main.c
index cd5a74be..6cdca40d 100644
--- a/src/doom/d_main.c
+++ b/src/doom/d_main.c
@@ -1605,16 +1605,22 @@ void D_DoomMain (void)
         if (gamemission < pack_chex)
         {
             autoload_dir = M_GetAutoloadDir("doom-all");
-            DEH_AutoLoadPatches(autoload_dir);
-            W_AutoLoadWADs(autoload_dir);
-            free(autoload_dir);
+            if (autoload_dir != NULL)
+            {
+                DEH_AutoLoadPatches(autoload_dir);
+                W_AutoLoadWADs(autoload_dir);
+                free(autoload_dir);
+            }
         }

         // auto-loaded files per IWAD
         autoload_dir = M_GetAutoloadDir(D_SaveGameIWADName(gamemission, gamevariant));
-        DEH_AutoLoadPatches(autoload_dir);
-        W_AutoLoadWADs(autoload_dir);
-        free(autoload_dir);
+        if (autoload_dir != NULL)
+        {
+            DEH_AutoLoadPatches(autoload_dir);
+            W_AutoLoadWADs(autoload_dir);
+            free(autoload_dir);
+        }
     }

     // Load Dehacked patches specified on the command line with -deh.
diff --git a/src/heretic/d_main.c b/src/heretic/d_main.c
index b2aeab8d..5f4c6693 100644
--- a/src/heretic/d_main.c
+++ b/src/heretic/d_main.c
@@ -909,9 +909,12 @@ void D_DoomMain(void)
     {
         char *autoload_dir;
         autoload_dir = M_GetAutoloadDir("heretic.wad");
-        DEH_AutoLoadPatches(autoload_dir);
-        W_AutoLoadWADs(autoload_dir);
-        free(autoload_dir);
+        if (autoload_dir != NULL)
+        {
+            DEH_AutoLoadPatches(autoload_dir);
+            W_AutoLoadWADs(autoload_dir);
+            free(autoload_dir);
+        }
     }

     // Load dehacked patches specified on the command line.
diff --git a/src/hexen/h2_main.c b/src/hexen/h2_main.c
index cdc48407..5dc9e9bb 100644
--- a/src/hexen/h2_main.c
+++ b/src/hexen/h2_main.c
@@ -448,9 +448,12 @@ void D_DoomMain(void)
     {
         char *autoload_dir;
         autoload_dir = M_GetAutoloadDir("hexen.wad");
-        // TODO? DEH_AutoLoadPatches(autoload_dir);
-        W_AutoLoadWADs(autoload_dir);
-        free(autoload_dir);
+        if (autoload_dir != NULL)
+        {
+            // TODO? DEH_AutoLoadPatches(autoload_dir);
+            W_AutoLoadWADs(autoload_dir);
+            free(autoload_dir);
+        }
     }

     HandleArgs();
diff --git a/src/m_config.c b/src/m_config.c
index 1d043970..88b10a4c 100644
--- a/src/m_config.c
+++ b/src/m_config.c
@@ -2406,6 +2406,11 @@ void M_SetMusicPackDir(void)
     }

     prefdir = SDL_GetPrefPath("", PACKAGE_TARNAME);
+    if (prefdir == NULL)
+    {
+        printf("M_SetMusicPackDir: SDL_GetPrefPath failed, music pack directory not set\n");
+        return;
+    }
     music_pack_path = M_StringJoin(prefdir, "music-packs", NULL);

     M_MakeDirectory(prefdir);
@@ -2502,6 +2507,11 @@ char *M_GetAutoloadDir(const char *iwadname)
     {
         char *prefdir;
         prefdir = SDL_GetPrefPath("", PACKAGE_TARNAME);
+        if (prefdir == NULL)
+        {
+            printf("M_GetAutoloadDir: SDL_GetPrefPath failed\n");
+            return NULL;
+        }
         autoload_path = M_StringJoin(prefdir, "autoload", NULL);
         SDL_free(prefdir);
     }
diff --git a/src/strife/d_main.c b/src/strife/d_main.c
index d56e2832..3315ec4a 100644
--- a/src/strife/d_main.c
+++ b/src/strife/d_main.c
@@ -1761,9 +1761,12 @@ void D_DoomMain (void)
     {
         char *autoload_dir;
         autoload_dir = M_GetAutoloadDir("strife1.wad");
-        DEH_AutoLoadPatches(autoload_dir);
-        W_AutoLoadWADs(autoload_dir);
-        free(autoload_dir);
+        if (autoload_dir != NULL)
+        {
+            DEH_AutoLoadPatches(autoload_dir);
+            W_AutoLoadWADs(autoload_dir);
+            free(autoload_dir);
+        }
     }

     // Load dehacked patches specified on the command line.