fix sol::error crash

This commit is contained in:
Lion Kortlepel committed 2026-04-19 18:17:54 +00:00
1 parent 7096fe058a
commit e260de55af
2 files changed
+10 -6

No files matched your search

+6
View File
@@ -34,6 +34,7 @@
#include <queue> #include <queue>
#include <random> #include <random>
#include <set> #include <set>
#include <sol/protected_function_result.hpp>
#include <toml.hpp> #include <toml.hpp>
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
@@ -84,6 +85,11 @@ struct TLuaResult {
std::make_shared<std::condition_variable>() std::make_shared<std::condition_variable>()
}; };
void SetErrorMessageFromResult(sol::protected_function_result& Res) {
auto error = Res.get<std::optional<std::string>>();
ErrorMessage = error ? *error : "(unknown error; error object is not a string value)";
}
void MarkAsReady(); void MarkAsReady();
void WaitUntilReady(); void WaitUntilReady();
}; };
+4 -6
View File
@@ -550,8 +550,8 @@ sol::table TLuaEngine::StateThreadData::Lua_TriggerLocalEvent(const std::string&
Result.set(i, FnRet); Result.set(i, FnRet);
++i; ++i;
} else { } else {
sol::error Err = FnRet; auto ErrStr = FnRet.get<std::optional<std::string>>();
beammp_lua_error(std::string("TriggerLocalEvent: ") + Err.what()); 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); S.second->Result = std::move(Res);
} else { } else {
S.second->Error = true; S.second->Error = true;
sol::error Err = Res; S.second->SetErrorMessageFromResult(Res);
S.second->ErrorMessage = Err.what();
} }
S.second->MarkAsReady(); S.second->MarkAsReady();
} }
@@ -1222,8 +1221,7 @@ void TLuaEngine::StateThreadData::operator()() {
Result->Result = std::move(Res); Result->Result = std::move(Res);
} else { } else {
Result->Error = true; Result->Error = true;
sol::error Err = Res; Result->SetErrorMessageFromResult(Res);
Result->ErrorMessage = Err.what();
} }
Result->MarkAsReady(); Result->MarkAsReady();
} else { } else {