Fix Lua panic when error() message is not a string
This commit is contained in:
parent
fe1f72ab0a
commit
09f9e465e7
@ -187,7 +187,9 @@ void ScriptApiBase::loadScript(const std::string &script_path)
|
|||||||
}
|
}
|
||||||
ok = ok && !lua_pcall(L, 0, 0, error_handler);
|
ok = ok && !lua_pcall(L, 0, 0, error_handler);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
std::string error_msg = readParam<std::string>(L, -1);
|
const char *error_msg = lua_tostring(L, -1);
|
||||||
|
if (!error_msg)
|
||||||
|
error_msg = "(error object is not a string)";
|
||||||
lua_pop(L, 2); // Pop error message and error handler
|
lua_pop(L, 2); // Pop error message and error handler
|
||||||
throw ModError("Failed to load and run script from " +
|
throw ModError("Failed to load and run script from " +
|
||||||
script_path + ":\n" + error_msg);
|
script_path + ":\n" + error_msg);
|
||||||
@ -219,7 +221,9 @@ void ScriptApiBase::loadModFromMemory(const std::string &mod_name)
|
|||||||
if (ok)
|
if (ok)
|
||||||
ok = !lua_pcall(L, 0, 0, error_handler);
|
ok = !lua_pcall(L, 0, 0, error_handler);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
std::string error_msg = luaL_checkstring(L, -1);
|
const char *error_msg = lua_tostring(L, -1);
|
||||||
|
if (!error_msg)
|
||||||
|
error_msg = "(error object is not a string)";
|
||||||
lua_pop(L, 2); // Pop error message and error handler
|
lua_pop(L, 2); // Pop error message and error handler
|
||||||
throw ModError("Failed to load and run mod \"" +
|
throw ModError("Failed to load and run mod \"" +
|
||||||
mod_name + "\":\n" + error_msg);
|
mod_name + "\":\n" + error_msg);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user