diff options
author | Mattes D <github@xoft.cz> | 2015-05-07 23:02:18 +0200 |
---|---|---|
committer | Mattes D <github@xoft.cz> | 2015-05-07 23:03:04 +0200 |
commit | fee690a3d1412860b19447b2b390d3521adae7c6 (patch) | |
tree | ae916b7f21ea456da862abeee338742d4c7bc6ac /src | |
parent | Added Lua C API checks in Debug builds. (diff) | |
download | cuberite-fee690a3d1412860b19447b2b390d3521adae7c6.tar cuberite-fee690a3d1412860b19447b2b390d3521adae7c6.tar.gz cuberite-fee690a3d1412860b19447b2b390d3521adae7c6.tar.bz2 cuberite-fee690a3d1412860b19447b2b390d3521adae7c6.tar.lz cuberite-fee690a3d1412860b19447b2b390d3521adae7c6.tar.xz cuberite-fee690a3d1412860b19447b2b390d3521adae7c6.tar.zst cuberite-fee690a3d1412860b19447b2b390d3521adae7c6.zip |
Diffstat (limited to 'src')
-rw-r--r-- | src/Bindings/LuaState.cpp | 13 | ||||
-rw-r--r-- | src/Bindings/ManualBindings.cpp | 5 |
2 files changed, 9 insertions, 9 deletions
diff --git a/src/Bindings/LuaState.cpp b/src/Bindings/LuaState.cpp index f574dbe26..9c1e2865c 100644 --- a/src/Bindings/LuaState.cpp +++ b/src/Bindings/LuaState.cpp @@ -1535,7 +1535,7 @@ int cLuaState::CallFunctionWithForeignParams( if (!PushFunction(a_FunctionName.c_str())) { LOGWARNING("Function '%s' not found", a_FunctionName.c_str()); - lua_pop(m_LuaState, 2); + lua_settop(m_LuaState, OldTop); return -1; } @@ -1543,7 +1543,7 @@ int cLuaState::CallFunctionWithForeignParams( if (CopyStackFrom(a_SrcLuaState, a_SrcParamStart, a_SrcParamEnd) < 0) { // Something went wrong, fix the stack and exit - lua_pop(m_LuaState, 2); + lua_settop(m_LuaState, OldTop); m_NumCurrentFunctionArgs = -1; m_CurrentFunctionName.clear(); return -1; @@ -1554,13 +1554,8 @@ int cLuaState::CallFunctionWithForeignParams( if (ReportErrors(s)) { LOGWARN("Error while calling function '%s' in '%s'", a_FunctionName.c_str(), m_SubsystemName.c_str()); - // Fix the stack. - // We don't know how many values have been pushed, so just get rid of any that weren't there initially - int CurTop = lua_gettop(m_LuaState); - if (CurTop > OldTop) - { - lua_pop(m_LuaState, CurTop - OldTop); - } + // Reset the stack: + lua_settop(m_LuaState, OldTop); // Reset the internal checking mechanisms: m_NumCurrentFunctionArgs = -1; diff --git a/src/Bindings/ManualBindings.cpp b/src/Bindings/ManualBindings.cpp index 2fbff11d3..20042a780 100644 --- a/src/Bindings/ManualBindings.cpp +++ b/src/Bindings/ManualBindings.cpp @@ -1988,6 +1988,11 @@ static int tolua_cPluginManager_CallPlugin(lua_State * tolua_S) { return 0; } + if (Callback.m_NumReturns < 0) + { + // The call has failed, there are zero return values. Do NOT return negative number (Lua considers that a "yield") + return 0; + } return Callback.m_NumReturns; } |