diff options
author | Spp <none@none> | 2010-10-29 14:09:25 +0200 |
---|---|---|
committer | Spp <none@none> | 2010-10-29 14:09:25 +0200 |
commit | c9b6f44e9f2fe05a3a5515494776cdf445ef1dea (patch) | |
tree | 81f9ac7f7570ce9409d8cb70e75cb270a44e4239 /src | |
parent | 7b35d0b2e8d4617120d2fc56ad2990f38a881f71 (diff) |
Core/Groups: Add some checks to prevent a crash with Invites
Core/Groups: Use proper size with SMSG_GROUP_DECLINE Opcode
Fixes issue 4412. (Prevents the crash but the main reason of player being null not solved)
--HG--
branch : trunk
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Groups/Group.cpp | 15 | ||||
-rwxr-xr-x | src/server/game/Server/Protocol/Handlers/GroupHandler.cpp | 10 |
2 files changed, 14 insertions, 11 deletions
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index b1caef5c981..1448b88bdfe 100755 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -270,16 +270,19 @@ bool Group::AddLeaderInvite(Player *player) uint32 Group::RemoveInvite(Player *player) { - m_invitees.erase(player); - - player->SetGroupInvite(NULL); + if (player) + { + m_invitees.erase(player); + player->SetGroupInvite(NULL); + } return GetMembersCount(); } void Group::RemoveAllInvites() { for (InvitesList::iterator itr=m_invitees.begin(); itr != m_invitees.end(); ++itr) - (*itr)->SetGroupInvite(NULL); + if (*itr) + (*itr)->SetGroupInvite(NULL); m_invitees.clear(); } @@ -288,7 +291,7 @@ Player* Group::GetInvited(const uint64& guid) const { for (InvitesList::const_iterator itr = m_invitees.begin(); itr != m_invitees.end(); ++itr) { - if ((*itr)->GetGUID() == guid) + if ((*itr) && (*itr)->GetGUID() == guid) return (*itr); } return NULL; @@ -298,7 +301,7 @@ Player* Group::GetInvited(const std::string& name) const { for (InvitesList::const_iterator itr = m_invitees.begin(); itr != m_invitees.end(); ++itr) { - if ((*itr)->GetName() == name) + if ((*itr) && (*itr)->GetName() == name) return (*itr); } return NULL; diff --git a/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp b/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp index 1817953bd2c..9946bc60538 100755 --- a/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/GroupHandler.cpp @@ -236,18 +236,18 @@ void WorldSession::HandleGroupDeclineOpcode(WorldPacket & /*recv_data*/) Group *group = GetPlayer()->GetGroupInvite(); if (!group) return; - // remember leader if online - Player *leader = sObjectMgr.GetPlayer(group->GetLeaderGUID()); - // uninvite, group can be deleted GetPlayer()->UninviteFromGroup(); + // remember leader if online + Player *leader = sObjectMgr.GetPlayer(group->GetLeaderGUID()); if (!leader || !leader->GetSession()) return; // report - WorldPacket data(SMSG_GROUP_DECLINE, 10); // guess size - data << GetPlayer()->GetName(); + std::string name = std::string(GetPlayer()->GetName()); + WorldPacket data(SMSG_GROUP_DECLINE, name.length()); + data << name.c_str(); leader->GetSession()->SendPacket(&data); } |