diff options
author | Mattes D <github@xoft.cz> | 2015-04-29 15:14:22 +0200 |
---|---|---|
committer | Mattes D <github@xoft.cz> | 2015-04-29 15:14:22 +0200 |
commit | fc95501f68b28f2fc595eb574546500c2713ef96 (patch) | |
tree | 4201e7e773b152aea800f1024bc0ea4bca28eeda /src/Bindings/LuaState.cpp | |
parent | Fix explosions trying to write to unread blockarea (diff) | |
download | cuberite-fc95501f68b28f2fc595eb574546500c2713ef96.tar cuberite-fc95501f68b28f2fc595eb574546500c2713ef96.tar.gz cuberite-fc95501f68b28f2fc595eb574546500c2713ef96.tar.bz2 cuberite-fc95501f68b28f2fc595eb574546500c2713ef96.tar.lz cuberite-fc95501f68b28f2fc595eb574546500c2713ef96.tar.xz cuberite-fc95501f68b28f2fc595eb574546500c2713ef96.tar.zst cuberite-fc95501f68b28f2fc595eb574546500c2713ef96.zip |
Diffstat (limited to 'src/Bindings/LuaState.cpp')
-rw-r--r-- | src/Bindings/LuaState.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/Bindings/LuaState.cpp b/src/Bindings/LuaState.cpp index 38e008b2a..ed31e678f 100644 --- a/src/Bindings/LuaState.cpp +++ b/src/Bindings/LuaState.cpp @@ -937,6 +937,18 @@ void cLuaState::GetStackValue(int a_StackPos, AString & a_Value) +void cLuaState::GetStackValue(int a_StackPos, BLOCKTYPE & a_ReturnedVal) +{ + if (lua_isnumber(m_LuaState, a_StackPos)) + { + a_ReturnedVal = static_cast<BLOCKTYPE>(tolua_tonumber(m_LuaState, a_StackPos, a_ReturnedVal)); + } +} + + + + + void cLuaState::GetStackValue(int a_StackPos, bool & a_ReturnedVal) { a_ReturnedVal = (tolua_toboolean(m_LuaState, a_StackPos, a_ReturnedVal ? 1 : 0) > 0); @@ -995,6 +1007,24 @@ void cLuaState::GetStackValue(int a_StackPos, int & a_ReturnedVal) +void cLuaState::GetStackValue(int a_StackPos, pBlockArea & a_ReturnedVal) +{ + if (lua_isnil(m_LuaState, a_StackPos)) + { + a_ReturnedVal = nullptr; + return; + } + tolua_Error err; + if (tolua_isusertype(m_LuaState, a_StackPos, "cBlockArea", false, &err)) + { + a_ReturnedVal = *(reinterpret_cast<cBlockArea **>(lua_touserdata(m_LuaState, a_StackPos))); + } +} + + + + + void cLuaState::GetStackValue(int a_StackPos, pBoundingBox & a_ReturnedVal) { if (lua_isnil(m_LuaState, a_StackPos)) @@ -1005,7 +1035,7 @@ void cLuaState::GetStackValue(int a_StackPos, pBoundingBox & a_ReturnedVal) tolua_Error err; if (tolua_isusertype(m_LuaState, a_StackPos, "cBoundingBox", false, &err)) { - a_ReturnedVal = *((cBoundingBox **)lua_touserdata(m_LuaState, a_StackPos)); + a_ReturnedVal = *(reinterpret_cast<cBoundingBox **>(lua_touserdata(m_LuaState, a_StackPos))); } } |