ref: 85221618cc9e56b4fa30af66d58031c2fb599088
parent: 0d7f38c7513f3d8811b84e1b11b9686429f010f1
author: James Haley <[email protected]>
date: Sat Aug 16 13:30:45 EDT 2014
Fix finding of voices.wad when -iwad is only hint Somebody broke this by using sizeof() on a malloc'd char *
--- a/src/strife/d_main.c
+++ b/src/strife/d_main.c
@@ -839,19 +839,24 @@
if((p = M_CheckParm("-iwad")) && p < myargc - 1)
{
char *iwad = myargv[p + 1];
- size_t len = strlen(iwad) + 24;
- char *filename = malloc(len);
- char sepchar;
-
- // how the heck is Choco surviving without this routine?
- sepchar = M_GetFilePath(iwad, filename, len);
- filename[strlen(filename)] = sepchar;
- M_StringConcat(filename, "voices.wad", sizeof(filename));
-
- if(!M_FileExists(filename))
+ size_t len = strlen(iwad) + 1;
+ char *iwadpath = Z_Malloc(len, PU_STATIC, NULL);
+ char *voiceswad;
+
+ // extract base path of IWAD parameter
+ M_GetFilePath(iwad, iwadpath, len);
+
+ // concatenate with /voices.wad
+ voiceswad = M_SafeFilePath(iwadpath, "voices.wad");
+ Z_Free(iwadpath);
+
+ if(!M_FileExists(voiceswad))
+ {
disable_voices = 1;
+ Z_Free(voiceswad);
+ }
else
- name = filename; // STRIFE-FIXME: memory leak!!
+ name = voiceswad; // STRIFE-FIXME: memory leak!!
}
else
disable_voices = 1;