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.