From 4520d56fa3a81a8f460d73c455de40662cc7ea25 Mon Sep 17 00:00:00 2001 From: toaster Date: Thu, 5 Jan 2023 18:10:42 +0000 Subject: [PATCH] K_InitTerrain: Do what ANIMDEFs parsing does and create a copy of the TERRAIN lump with a guaranteed null terminator --- src/k_terrain.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/k_terrain.c b/src/k_terrain.c index a702f53ad..44a704834 100644 --- a/src/k_terrain.c +++ b/src/k_terrain.c @@ -1745,9 +1745,9 @@ static boolean K_DoTERRAINLumpParse(size_t num, void (*parser)(size_t, char *, c Return:- false if any errors occured, otherwise true. --------------------------------------------------*/ -static boolean K_TERRAINLumpParser(UINT8 *data, size_t size) +static boolean K_TERRAINLumpParser(char *data, size_t size) { - char *tkn = M_GetToken((char *)data); + char *tkn = M_GetToken(data); UINT32 tknHash = 0; size_t pos = 0; size_t i; @@ -2136,6 +2136,7 @@ void K_InitTerrain(UINT16 wadNum) else { size_t size = W_LumpLengthPwad(wadNum, lumpNum); + char *datacopy; size_t nameLength = strlen(wadfiles[wadNum]->filename) + 1 + strlen(lump_p->fullname); // length of file name, '|', and lump name char *name = malloc(nameLength + 1); @@ -2146,7 +2147,16 @@ void K_InitTerrain(UINT16 wadNum) size = W_LumpLengthPwad(wadNum, lumpNum); CONS_Printf(M_GetText("Loading TERRAIN from %s\n"), name); - K_TERRAINLumpParser(data, size); + + datacopy = (char *)Z_Malloc((size+1)*sizeof(char),PU_STATIC,NULL); + memmove(datacopy,data,size); + datacopy[size] = '\0'; + + Z_Free(data); + + K_TERRAINLumpParser(datacopy, size); + + Z_Free(datacopy); free(name); }