mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Push error handler afresh each time lua_pcall is used
Fixes "double fault" / "error in error handling" messages (issue #1423) and instead shows a complete backtrace.
This commit is contained in:
parent
8658c8d9b5
commit
3304e1e517
16 changed files with 188 additions and 92 deletions
|
@ -27,13 +27,15 @@ bool ScriptApiServer::getAuth(const std::string &playername,
|
|||
{
|
||||
SCRIPTAPI_PRECHECKHEADER
|
||||
|
||||
int error_handler = PUSH_ERROR_HANDLER(L);
|
||||
getAuthHandler();
|
||||
lua_getfield(L, -1, "get_auth");
|
||||
if (lua_type(L, -1) != LUA_TFUNCTION)
|
||||
throw LuaError("Authentication handler missing get_auth");
|
||||
lua_pushstring(L, playername.c_str());
|
||||
PCALL_RES(lua_pcall(L, 1, 1, m_errorhandler));
|
||||
PCALL_RES(lua_pcall(L, 1, 1, error_handler));
|
||||
lua_remove(L, -2); // Remove auth handler
|
||||
lua_remove(L, error_handler);
|
||||
|
||||
// nil = login not allowed
|
||||
if (lua_isnil(L, -1))
|
||||
|
@ -99,6 +101,7 @@ void ScriptApiServer::createAuth(const std::string &playername,
|
|||
{
|
||||
SCRIPTAPI_PRECHECKHEADER
|
||||
|
||||
int error_handler = PUSH_ERROR_HANDLER(L);
|
||||
getAuthHandler();
|
||||
lua_getfield(L, -1, "create_auth");
|
||||
lua_remove(L, -2); // Remove auth handler
|
||||
|
@ -106,7 +109,8 @@ void ScriptApiServer::createAuth(const std::string &playername,
|
|||
throw LuaError("Authentication handler missing create_auth");
|
||||
lua_pushstring(L, playername.c_str());
|
||||
lua_pushstring(L, password.c_str());
|
||||
PCALL_RES(lua_pcall(L, 2, 0, m_errorhandler));
|
||||
PCALL_RES(lua_pcall(L, 2, 0, error_handler));
|
||||
lua_pop(L, 1); // Pop error handler
|
||||
}
|
||||
|
||||
bool ScriptApiServer::setPassword(const std::string &playername,
|
||||
|
@ -114,6 +118,7 @@ bool ScriptApiServer::setPassword(const std::string &playername,
|
|||
{
|
||||
SCRIPTAPI_PRECHECKHEADER
|
||||
|
||||
int error_handler = PUSH_ERROR_HANDLER(L);
|
||||
getAuthHandler();
|
||||
lua_getfield(L, -1, "set_password");
|
||||
lua_remove(L, -2); // Remove auth handler
|
||||
|
@ -121,7 +126,8 @@ bool ScriptApiServer::setPassword(const std::string &playername,
|
|||
throw LuaError("Authentication handler missing set_password");
|
||||
lua_pushstring(L, playername.c_str());
|
||||
lua_pushstring(L, password.c_str());
|
||||
PCALL_RES(lua_pcall(L, 2, 1, m_errorhandler));
|
||||
PCALL_RES(lua_pcall(L, 2, 1, error_handler));
|
||||
lua_remove(L, error_handler);
|
||||
return lua_toboolean(L, -1);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue