From 52e796815a8163312645a2d368412a30f5a20526 Mon Sep 17 00:00:00 2001 From: NovaRain Date: Sat, 17 Dec 2022 10:35:39 +0800 Subject: [PATCH] Fixed a crash bug in FullItemDescInBarter * when weapon/ammo has no description, it'd trigger UB from strncpy_s. --- sfall/Modules/BugFixes.cpp | 3 +++ sfall/Translate.cpp | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sfall/Modules/BugFixes.cpp b/sfall/Modules/BugFixes.cpp index 0e8bcd60..a6a972db 100644 --- a/sfall/Modules/BugFixes.cpp +++ b/sfall/Modules/BugFixes.cpp @@ -1693,6 +1693,9 @@ static bool showItemDescription = false; static void __stdcall AppendText(const char* text, const char* desc) { if (showItemDescription && currDescLen == 0) { + if (desc == nullptr) { + desc = fo::util::MessageSearch(&fo::var::proto_main_msg_file, 493); + } strncpy_s(messageBuffer, desc, 161); int len = strlen(messageBuffer); if (len > 160) { diff --git a/sfall/Translate.cpp b/sfall/Translate.cpp index 7238f74f..0d015038 100644 --- a/sfall/Translate.cpp +++ b/sfall/Translate.cpp @@ -49,7 +49,7 @@ std::vector Translate::GetList(const char* section, const char* set static void MakeLangTranslationPath(const char* config) { char patches[65], language[32]; - char fileConfig[65] = ".\\"; + char fileConfig[67] = ".\\"; std::strcpy(&fileConfig[2], config); IniReader::GetString("system", "language", "english", language, 32, fileConfig); @@ -74,7 +74,7 @@ static void InitMessagesTranslate() { combatBlockedMessage = Translate::Get("sfall", "BlockedCombat", "You cannot enter combat at this time."); combatSaveFailureMsg = Translate::Get("sfall", "SaveInCombat", "Cannot save at this time."); saveSfallDataFailMsg = Translate::Get("sfall", "SaveSfallDataFail", "ERROR saving extended savegame information! " - "Check if other programs interfere with savegame files/folders and try again!"); + "Check if other programs interfere with savegame files/folders and try again."); } void Translate::init(const char* config) {