From 6c19e5ecae572b2a1e6c91adf7291739dfe85afb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Sun, 18 Jun 2023 12:03:59 +0200 Subject: [PATCH] Fix #10868: [Script] Handle errors when loading savegame data on stack (#11029) (cherry picked from commit 1d9bc2352538bbe4ee0a2b281da95fe9f5015f02) --- src/script/script_instance.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/script/script_instance.cpp b/src/script/script_instance.cpp index 04c9970188..15da2093e9 100644 --- a/src/script/script_instance.cpp +++ b/src/script/script_instance.cpp @@ -29,6 +29,8 @@ #include "../fileio_func.h" #include "../league_type.h" +#include "../3rdparty/fmt/format.h" + #include "../safeguards.h" ScriptStorage::~ScriptStorage() @@ -731,9 +733,16 @@ void ScriptInstance::LoadOnStack(ScriptData *data) ScriptDataVariant version = data->front(); data->pop_front(); - sq_pushinteger(vm, std::get(version)); - LoadObjects(vm, data); - this->is_save_data_on_stack = true; + SQInteger top = sq_gettop(vm); + try { + sq_pushinteger(vm, std::get(version)); + LoadObjects(vm, data); + this->is_save_data_on_stack = true; + } catch (Script_FatalError &e) { + ScriptLog::Warning(fmt::format("Loading failed: {}", e.GetErrorMessage()).c_str()); + /* Discard partially loaded savegame data and version. */ + sq_settop(vm, top); + } } bool ScriptInstance::CallLoad()