diff options
author | kaelima <kaelima@live.se> | 2012-02-21 16:50:45 +0100 |
---|---|---|
committer | kaelima <kaelima@live.se> | 2012-02-21 16:50:45 +0100 |
commit | c15f7bfc193a2f9e05e999e3ade588002df366e2 (patch) | |
tree | 118d718a67a13dfb23a0d43162804bd90227d58b /src | |
parent | 2f37e8209770df8677839626f70ffb60179f68c3 (diff) |
Core/Pet: Fixed possible crash after swapping pet with stable master. Closes #5177
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Handlers/NPCHandler.cpp | 16 |
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 |