diff options
author | sfan5 <sfan5@live.de> | 2020-02-11 13:23:03 +0100 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2020-02-11 19:21:12 +0100 |
commit | 91eef646a59575bd9ae792e257bb6ad12fafc0b1 (patch) | |
tree | f7346e6020225e143b8da6c25d3ffe0572674f4c | |
parent | b14aa1c84714a4800d214768ff7868a7bb76f7ae (diff) | |
download | minetest-91eef646a59575bd9ae792e257bb6ad12fafc0b1.tar.gz minetest-91eef646a59575bd9ae792e257bb6ad12fafc0b1.tar.bz2 minetest-91eef646a59575bd9ae792e257bb6ad12fafc0b1.zip |
Script API: Check that SAOs are still usable before attempting to use them
-rw-r--r-- | src/content_sao.cpp | 4 | ||||
-rw-r--r-- | src/script/lua_api/l_object.cpp | 4 | ||||
-rw-r--r-- | src/server.cpp | 10 |
3 files changed, 8 insertions, 10 deletions
diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 43c784b42..5119223a7 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -864,7 +864,7 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, RemotePlayer *player_, session_t p m_peer_id(peer_id_), m_is_singleplayer(is_singleplayer) { - assert(m_peer_id != 0); // pre-condition + SANITY_CHECK(m_peer_id != PEER_ID_INEXISTENT); m_prop.hp_max = PLAYER_MAX_HP_DEFAULT; m_prop.breath_max = PLAYER_MAX_BREATH_DEFAULT; @@ -1393,7 +1393,7 @@ bool PlayerSAO::setWieldedItem(const ItemStack &item) void PlayerSAO::disconnected() { - m_peer_id = 0; + m_peer_id = PEER_ID_INEXISTENT; m_pending_removal = true; } diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index efdb345c9..f23282a95 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -60,6 +60,8 @@ LuaEntitySAO* ObjectRef::getluaobject(ObjectRef *ref) return NULL; if (obj->getType() != ACTIVEOBJECT_TYPE_LUAENTITY) return NULL; + if (obj->isGone()) + return NULL; return (LuaEntitySAO*)obj; } @@ -70,6 +72,8 @@ PlayerSAO* ObjectRef::getplayersao(ObjectRef *ref) return NULL; if (obj->getType() != ACTIVEOBJECT_TYPE_PLAYER) return NULL; + if (obj->isGone()) + return NULL; return (PlayerSAO*)obj; } diff --git a/src/server.cpp b/src/server.cpp index f1613cffe..c1f271490 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1768,10 +1768,7 @@ void Server::SendTimeOfDay(session_t peer_id, u16 time, f32 time_speed) void Server::SendPlayerHP(session_t peer_id) { PlayerSAO *playersao = getPlayerSAO(peer_id); - // In some rare case if the player is disconnected - // while Lua call l_punch, for example, this can be NULL - if (!playersao) - return; + assert(playersao); SendHP(peer_id, playersao->getHP()); m_script->player_event(playersao,"health_changed"); @@ -2701,10 +2698,7 @@ void Server::sendDetachedInventories(session_t peer_id, bool incremental) void Server::DiePlayer(session_t peer_id, const PlayerHPChangeReason &reason) { PlayerSAO *playersao = getPlayerSAO(peer_id); - // In some rare cases this can be NULL -- if the player is disconnected - // when a Lua function modifies l_punch, for example - if (!playersao) - return; + assert(playersao); infostream << "Server::DiePlayer(): Player " << playersao->getPlayer()->getName() |