From 6d0c6be1661e1ed9ace6d55f74798e442e958b50 Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Mon, 2 Jan 2023 13:18:49 +0100 Subject: [PATCH] server side safe checks --- src/game/server/ServerConnexion.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/game/server/ServerConnexion.cpp b/src/game/server/ServerConnexion.cpp index ca30145..0d43452 100644 --- a/src/game/server/ServerConnexion.cpp +++ b/src/game/server/ServerConnexion.cpp @@ -10,6 +10,8 @@ #define KEEP_ALIVE_TIMEOUT 10 * 1000 // 10s +#define SAFE_CHECK(expr) if(expr) return + namespace td { namespace server { @@ -97,8 +99,8 @@ void ServerConnexion::HandlePacket(const protocol::PlayerLoginPacket* packet) { } void ServerConnexion::HandlePacket(const protocol::SelectTeamPacket* packet) { - if (m_Server->GetGame().GetGameState() != game::GameState::Lobby) - return; + SAFE_CHECK(m_Server->GetGame().GetGameState() != game::GameState::Lobby); + if (static_cast(packet->GetSelectedTeam()) >= -1 || static_cast(packet->GetSelectedTeam()) <= 1) { if (m_Player->GetTeamColor() == game::TeamColor::None) { // join a team m_Server->GetGame().GetTeam(packet->GetSelectedTeam()).AddPlayer(m_Player); @@ -138,12 +140,12 @@ void ServerConnexion::InitConnection() { protocol::ConnexionInfoPacket conPacket(m_ID); SendPacket(&conPacket); - if (m_Server->GetGame().GetGameState() == game::GameState::Game) { - protocol::WorldBeginDataPacket headerDataPacket(m_Server->GetGame().GetWorld()); - protocol::WorldBeginDataPacket dataPacket(m_Server->GetGame().GetWorld()); - SendPacket(&headerDataPacket); - SendPacket(&dataPacket); - } + SAFE_CHECK(m_Server->GetGame().GetGameState() != game::GameState::Game); + + protocol::WorldBeginDataPacket headerDataPacket(m_Server->GetGame().GetWorld()); + protocol::WorldBeginDataPacket dataPacket(m_Server->GetGame().GetWorld()); + SendPacket(&headerDataPacket); + SendPacket(&dataPacket); } void ServerConnexion::HandlePacket(const protocol::PlaceTowerPacket* packet) { @@ -153,12 +155,10 @@ void ServerConnexion::HandlePacket(const protocol::PlaceTowerPacket* packet) { Vec2f towerPos = { static_cast(packet->GetTowerX()), static_cast(packet->GetTowerY()) }; - if (!world->CanPlaceLittleTower(towerPos, m_ID)) - return; + SAFE_CHECK(!world->CanPlaceLittleTower(towerPos, m_ID)); if (towerInfo.IsBigTower()) - if (!world->CanPlaceBigTower(towerPos, m_ID)) - return; + SAFE_CHECK(!world->CanPlaceBigTower(towerPos, m_ID)); game::TowerPtr tower = world->PlaceTowerAt(towerType, packet->GetTowerX(), packet->GetTowerY(), m_ID);