From 1f212e6f2a0e89ad219a1419f9ba2528e1fedf34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Thu, 1 May 2025 16:48:02 +0200 Subject: [PATCH] Fix: Handle \t when loading GS strings from savegame (#14180) --- src/saveload/game_sl.cpp | 2 +- src/saveload/saveload.cpp | 3 +++ src/saveload/saveload.h | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/saveload/game_sl.cpp b/src/saveload/game_sl.cpp index 769f8e030a..a4a37282ae 100644 --- a/src/saveload/game_sl.cpp +++ b/src/saveload/game_sl.cpp @@ -121,7 +121,7 @@ static uint32_t _game_saveload_strings; class SlGameLanguageString : public DefaultSaveLoadHandler { public: inline static const SaveLoad description[] = { - SLEG_SSTR("string", _game_saveload_string, SLE_STR | SLF_ALLOW_CONTROL), + SLEG_SSTR("string", _game_saveload_string, SLE_STR | SLF_ALLOW_CONTROL | SLF_REPLACE_TABCRLF), }; inline const static SaveLoadCompatTable compat_description = _game_language_string_sl_compat; diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index d4938ea35d..84e65c58b2 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1066,6 +1066,9 @@ static void SlStdString(void *ptr, VarType conv) if ((conv & SLF_ALLOW_NEWLINE) != 0) { settings.Set(StringValidationSetting::AllowNewline); } + if ((conv & SLF_REPLACE_TABCRLF) != 0) { + settings.Set(StringValidationSetting::ReplaceTabCrNlWithSpace); + } StrMakeValidInPlace(*str, settings); } diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 3b9fff52c0..d5ba763ed1 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -691,6 +691,7 @@ enum VarTypes : uint16_t { * Flags directing saving/loading of a variable */ SLF_ALLOW_CONTROL = 1 << 8, ///< Allow control codes in the strings. SLF_ALLOW_NEWLINE = 1 << 9, ///< Allow new lines in the strings. + SLF_REPLACE_TABCRLF = 1 << 10, ///< Replace tabs, cr and lf in the string with spaces. }; typedef uint32_t VarType;