From 85221618cc9e56b4fa30af66d58031c2fb599088 Mon Sep 17 00:00:00 2001 From: James Haley Date: Sat, 16 Aug 2014 17:30:45 -0500 Subject: Fix finding of voices.wad when -iwad is only hint Somebody broke this by using sizeof() on a malloc'd char * --- src/strife/d_main.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/strife/d_main.c b/src/strife/d_main.c index fdb6bbdc..b2eadd96 100644 --- a/src/strife/d_main.c +++ b/src/strife/d_main.c @@ -839,19 +839,24 @@ void D_IdentifyVersion(void) 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; -- cgit v1.2.3