From 71cc93f42cf5de7ec80f66f70c98b739c77b04dc Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 16 Sep 2023 07:44:21 +0200 Subject: [PATCH] - fixed: ZScript's lump reader may not truncate strings at 0 bytes, like all other callers of GetStringFromLump need. --- src/common/scripting/interface/vmnatives.cpp | 2 +- src/common/utility/cmdlib.cpp | 4 ++-- src/common/utility/cmdlib.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/common/scripting/interface/vmnatives.cpp b/src/common/scripting/interface/vmnatives.cpp index 16bf394db..350bf5ce3 100644 --- a/src/common/scripting/interface/vmnatives.cpp +++ b/src/common/scripting/interface/vmnatives.cpp @@ -844,7 +844,7 @@ DEFINE_ACTION_FUNCTION(_Wads, ReadLump) PARAM_PROLOGUE; PARAM_INT(lump); const bool isLumpValid = lump >= 0 && lump < fileSystem.GetNumEntries(); - ACTION_RETURN_STRING(isLumpValid ? GetStringFromLump(lump) : FString()); + ACTION_RETURN_STRING(isLumpValid ? GetStringFromLump(lump, false) : FString()); } //========================================================================== diff --git a/src/common/utility/cmdlib.cpp b/src/common/utility/cmdlib.cpp index 8dbce2b7a..28cba8fcd 100644 --- a/src/common/utility/cmdlib.cpp +++ b/src/common/utility/cmdlib.cpp @@ -1016,10 +1016,10 @@ void uppercopy(char* to, const char* from) // Loads a zero terminated string from a lump in the file system //========================================================================== -FString GetStringFromLump(int lump) +FString GetStringFromLump(int lump, bool zerotruncate) { auto fd = fileSystem.ReadFile(lump); FString ScriptBuffer(fd.GetString(), fd.GetSize()); - ScriptBuffer.Truncate(strlen(ScriptBuffer.GetChars())); // this is necessary to properly truncate the generated string to not contain 0 bytes. + if (zerotruncate) ScriptBuffer.Truncate(strlen(ScriptBuffer.GetChars())); // this is necessary to properly truncate the generated string to not contain 0 bytes. return ScriptBuffer; } diff --git a/src/common/utility/cmdlib.h b/src/common/utility/cmdlib.h index 06b5a5e0f..6f40c184c 100644 --- a/src/common/utility/cmdlib.h +++ b/src/common/utility/cmdlib.h @@ -87,7 +87,7 @@ struct MD5Context; void md5Update(FileReader& file, MD5Context& md5, unsigned len); void uppercopy(char* to, const char* from); -FString GetStringFromLump(int lump); +FString GetStringFromLump(int lump, bool zerotruncate = true); inline void fillshort(void* buff, size_t count, uint16_t clear) {