From 56e710266cbbb6d05538bb5509f0d47084455145 Mon Sep 17 00:00:00 2001 From: James R Date: Thu, 8 Feb 2024 18:16:39 -0800 Subject: [PATCH] M_TokenizerOpen: pass size in as argument instead of calling strlen implicitly This function is used for parsing TEXTMAP and the data is not NUL-terminated. --- src/doomdef.h | 2 +- src/k_rank.cpp | 2 +- src/m_misc.cpp | 4 ++-- src/p_setup.cpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/doomdef.h b/src/doomdef.h index 21e8bdb4f..14c879506 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -500,7 +500,7 @@ char *M_GetToken(const char *inputString); void M_UnGetToken(void); UINT32 M_GetTokenPos(void); -void M_TokenizerOpen(const char *inputString); +void M_TokenizerOpen(const char *inputString, size_t inputLength); void M_TokenizerClose(void); const char *M_TokenizerRead(UINT32 i); UINT32 M_TokenizerGetEndPos(void); diff --git a/src/k_rank.cpp b/src/k_rank.cpp index 702a55fe8..2c62c39cb 100644 --- a/src/k_rank.cpp +++ b/src/k_rank.cpp @@ -199,7 +199,7 @@ static boolean RankCapsules_LoadMapData(const virtres_t *virt) if (g_rankCapsules_udmf) // Count how many entries for each type we got in textmap. { virtlump_t *textmap = vres_Find(virt, "TEXTMAP"); - M_TokenizerOpen((char *)textmap->data); + M_TokenizerOpen((char *)textmap->data, textmap->size); if (!RankCapsules_TextmapCount(textmap->size)) { M_TokenizerClose(); diff --git a/src/m_misc.cpp b/src/m_misc.cpp index 7c993ca29..bda4b49f2 100644 --- a/src/m_misc.cpp +++ b/src/m_misc.cpp @@ -2276,7 +2276,7 @@ static UINT32 tokenizerInputLength = 0; static UINT8 tokenizerInComment = 0; // 0 = not in comment, 1 = // Single-line, 2 = /* Multi-line */ static boolean tokenizerIsString = false; // did we strip quotes from this token? -void M_TokenizerOpen(const char *inputString) +void M_TokenizerOpen(const char *inputString, size_t inputLength) { size_t i; @@ -2286,7 +2286,7 @@ void M_TokenizerOpen(const char *inputString) tokenCapacity[i] = 1024; tokenizerToken[i] = (char*)Z_Malloc(tokenCapacity[i] * sizeof(char), PU_STATIC, NULL); } - tokenizerInputLength = strlen(tokenizerInput); + tokenizerInputLength = inputLength; } void M_TokenizerClose(void) diff --git a/src/p_setup.cpp b/src/p_setup.cpp index 8ed2d00ca..6a660bb60 100644 --- a/src/p_setup.cpp +++ b/src/p_setup.cpp @@ -3459,7 +3459,7 @@ static boolean P_LoadMapData(const virtres_t *virt) if (udmf) // Count how many entries for each type we got in textmap. { virtlump_t *textmap = vres_Find(virt, "TEXTMAP"); - M_TokenizerOpen((char *)textmap->data); + M_TokenizerOpen((char *)textmap->data, textmap->size); if (!TextmapCount(textmap->size)) { M_TokenizerClose();