aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2020-06-21 20:19:11 +0200
committerjackpoz <giacomopoz@gmail.com>2020-06-21 20:19:11 +0200
commit3778f23c579ad1050c2b985b5f42b365a7736c24 (patch)
tree8aa8c640f5d59d06bd9b86fd039d125ad54899ec
parent51b221c8f8c77ca627ac175481758b1dbd30a22e (diff)
Core/LFG: Sanitize LFG roles sent by clients
-rw-r--r--src/server/game/DungeonFinding/LFG.h3
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp10
2 files changed, 12 insertions, 1 deletions
diff --git a/src/server/game/DungeonFinding/LFG.h b/src/server/game/DungeonFinding/LFG.h
index 9bee6d337b5..75062a3cbd6 100644
--- a/src/server/game/DungeonFinding/LFG.h
+++ b/src/server/game/DungeonFinding/LFG.h
@@ -40,7 +40,8 @@ enum LfgRoles
PLAYER_ROLE_LEADER = 0x01,
PLAYER_ROLE_TANK = 0x02,
PLAYER_ROLE_HEALER = 0x04,
- PLAYER_ROLE_DAMAGE = 0x08
+ PLAYER_ROLE_DAMAGE = 0x08,
+ PLAYER_ROLE_ANY = PLAYER_ROLE_LEADER | PLAYER_ROLE_TANK | PLAYER_ROLE_HEALER | PLAYER_ROLE_DAMAGE
};
enum LfgUpdateType
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 56c9fd4e7a9..b3882197a6a 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -399,6 +399,13 @@ void LFGMgr::JoinLfg(Player* player, uint8 roles, LfgDungeonSet& dungeons, const
if (!player || !player->GetSession() || dungeons.empty())
return;
+ // At least 1 role must be selected
+ if (!(roles & (PLAYER_ROLE_TANK | PLAYER_ROLE_HEALER | PLAYER_ROLE_DAMAGE)))
+ return;
+
+ // Sanitize input roles
+ roles &= PLAYER_ROLE_ANY;
+
Group* grp = player->GetGroup();
ObjectGuid guid = player->GetGUID();
ObjectGuid gguid = grp ? grp->GetGUID() : guid;
@@ -700,6 +707,9 @@ void LFGMgr::UpdateRoleCheck(ObjectGuid gguid, ObjectGuid guid /* = ObjectGuid::
if (itRoleCheck == RoleChecksStore.end())
return;
+ // Sanitize input roles
+ roles &= PLAYER_ROLE_ANY;
+
LfgRoleCheck& roleCheck = itRoleCheck->second;
bool sendRoleChosen = roleCheck.state != LFG_ROLECHECK_DEFAULT && guid;