From e260de55afeef67f4a8d7cb04327f3950551ee44 Mon Sep 17 00:00:00 2001 From: Lion Kortlepel Date: Wed, 15 Apr 2026 18:14:31 +0200 Subject: [PATCH] fix sol::error crash --- include/TLuaEngine.h | 6 ++++++ src/TLuaEngine.cpp | 10 ++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/include/TLuaEngine.h b/include/TLuaEngine.h index 47a5c76..96479dd 100644 --- a/include/TLuaEngine.h +++ b/include/TLuaEngine.h @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -84,6 +85,11 @@ struct TLuaResult { std::make_shared() }; + void SetErrorMessageFromResult(sol::protected_function_result& Res) { + auto error = Res.get>(); + ErrorMessage = error ? *error : "(unknown error; error object is not a string value)"; + } + void MarkAsReady(); void WaitUntilReady(); }; diff --git a/src/TLuaEngine.cpp b/src/TLuaEngine.cpp index d7bee3e..7481dd1 100644 --- a/src/TLuaEngine.cpp +++ b/src/TLuaEngine.cpp @@ -550,8 +550,8 @@ sol::table TLuaEngine::StateThreadData::Lua_TriggerLocalEvent(const std::string& Result.set(i, FnRet); ++i; } else { - sol::error Err = FnRet; - beammp_lua_error(std::string("TriggerLocalEvent: ") + Err.what()); + auto ErrStr = FnRet.get>(); + beammp_lua_error(std::string("TriggerLocalEvent: ") + (ErrStr ? *ErrStr : "(unknown error; error object is not a string)")); } } } @@ -1158,8 +1158,7 @@ void TLuaEngine::StateThreadData::operator()() { S.second->Result = std::move(Res); } else { S.second->Error = true; - sol::error Err = Res; - S.second->ErrorMessage = Err.what(); + S.second->SetErrorMessageFromResult(Res); } S.second->MarkAsReady(); } @@ -1222,8 +1221,7 @@ void TLuaEngine::StateThreadData::operator()() { Result->Result = std::move(Res); } else { Result->Error = true; - sol::error Err = Res; - Result->ErrorMessage = Err.what(); + Result->SetErrorMessageFromResult(Res); } Result->MarkAsReady(); } else {