From f2ef5f878df7c9536736684251fe86f456fc7590 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 28 Jul 2019 00:07:19 +0200 Subject: Core/PacketIO: Added missing packet array size checks --- src/server/game/Guilds/Guild.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/server/game/Guilds/Guild.cpp') diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 6a25fb9bbe7..18419eae7ea 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -1418,7 +1418,7 @@ void Guild::SendGuildRankInfo(WorldSession* session) const TC_LOG_DEBUG("guild", "SMSG_GUILD_RANK [%s]", session->GetPlayerInfo().c_str()); } -void Guild::HandleSetAchievementTracking(WorldSession* session, std::set const& achievementIds) +void Guild::HandleSetAchievementTracking(WorldSession* session, uint32 const* achievementIdsBegin, uint32 const* achievementIdsEnd) { Player* player = session->GetPlayer(); @@ -1426,10 +1426,14 @@ void Guild::HandleSetAchievementTracking(WorldSession* session, std::set { std::set criteriaIds; - for (uint32 achievementId : achievementIds) + for (uint32 const* achievementIdItr = achievementIdsBegin; achievementIdItr != achievementIdsEnd; ++achievementIdItr) { + uint32 achievementId = *achievementIdItr; if (AchievementEntry const* achievement = sAchievementStore.LookupEntry(achievementId)) { + if (!(achievement->Flags & ACHIEVEMENT_FLAG_GUILD) || m_achievementMgr.HasAchieved(achievementId)) + continue; + if (CriteriaTree const* tree = sCriteriaMgr->GetCriteriaTree(achievement->CriteriaTree)) { CriteriaMgr::WalkCriteriaTree(tree, [&criteriaIds](CriteriaTree const* node) @@ -1441,7 +1445,7 @@ void Guild::HandleSetAchievementTracking(WorldSession* session, std::set } } - member->SetTrackedCriteriaIds(criteriaIds); + member->SetTrackedCriteriaIds(std::move(criteriaIds)); m_achievementMgr.SendAllTrackedCriterias(player, member->GetTrackedCriteriaIds()); } } -- cgit v1.2.3