aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkaelima <kaelima@live.se>2012-02-21 16:50:45 +0100
committerkaelima <kaelima@live.se>2012-02-21 16:50:45 +0100
commitc15f7bfc193a2f9e05e999e3ade588002df366e2 (patch)
tree118d718a67a13dfb23a0d43162804bd90227d58b /src
parent2f37e8209770df8677839626f70ffb60179f68c3 (diff)
Core/Pet: Fixed possible crash after swapping pet with stable master. Closes #5177
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Handlers/NPCHandler.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp
index 1f286a0af05..6a44c7ae5e2 100755
--- a/src/server/game/Handlers/NPCHandler.cpp
+++ b/src/server/game/Handlers/NPCHandler.cpp
@@ -615,7 +615,7 @@ void WorldSession::HandleStablePet(WorldPacket & recv_data)
Pet* pet = _player->GetPet();
// can't place in stable dead pet
- if (!pet||!pet->isAlive()||pet->getPetType() != HUNTER_PET)
+ if (!pet || !pet->isAlive() || pet->getPetType() != HUNTER_PET)
{
SendStableResult(STABLE_ERR_STABLE);
return;
@@ -853,16 +853,22 @@ void WorldSession::HandleStableSwapPetCallback(PreparedQueryResult result, uint3
return;
}
- // move alive pet to slot or delete dead pet
Pet* pet = _player->GetPet();
+ // The player's pet could have been removed during the delay of the DB callback
+ if (!pet)
+ {
+ SendStableResult(STABLE_ERR_STABLE);
+ return;
+ }
+ // move alive pet to slot or delete dead pet
_player->RemovePet(pet, pet->isAlive() ? PetSaveMode(slot) : PET_SAVE_AS_DELETED);
// summon unstabled pet
- Pet* newpet = new Pet(_player);
- if (!newpet->LoadPetFromDB(_player, petEntry, petId))
+ Pet* newPet = new Pet(_player);
+ if (!newPet->LoadPetFromDB(_player, petEntry, petId))
{
- delete newpet;
+ delete newPet;
SendStableResult(STABLE_ERR_STABLE);
}
else