aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-10-18 23:14:07 +0200
committerShauren <shauren.trinity@gmail.com>2017-10-18 23:14:07 +0200
commit83d3c117f94e2482635731d87b1f4d16711fc50c (patch)
tree3309eb65c4c0c6b89a8429fe2d9deb4a86ecb45f
parentcd3feb00d547124f8df6e03feebd5af00c2c899e (diff)
Core/Players: Fixed possible null pointer dereference
CID 1162625 1377294 1377297
-rw-r--r--src/server/game/Entities/Player/Player.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 6ba48a7d80f..cc9b72a075d 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -15288,7 +15288,10 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
if (quest->GetRewSpell() > 0)
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(quest->GetRewSpell());
- if (questGiver->isType(TYPEMASK_UNIT) && !spellInfo->HasEffect(DIFFICULTY_NONE, SPELL_EFFECT_LEARN_SPELL) && !spellInfo->HasEffect(DIFFICULTY_NONE, SPELL_EFFECT_CREATE_ITEM) && !spellInfo->HasEffect(DIFFICULTY_NONE, SPELL_EFFECT_APPLY_AURA))
+ if (questGiver && questGiver->isType(TYPEMASK_UNIT) &&
+ !spellInfo->HasEffect(DIFFICULTY_NONE, SPELL_EFFECT_LEARN_SPELL) &&
+ !spellInfo->HasEffect(DIFFICULTY_NONE, SPELL_EFFECT_CREATE_ITEM) &&
+ !spellInfo->HasEffect(DIFFICULTY_NONE, SPELL_EFFECT_APPLY_AURA))
{
if (Unit* unit = questGiver->ToUnit())
unit->CastSpell(this, quest->GetRewSpell(), true);
@@ -15303,7 +15306,9 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
if (quest->RewardDisplaySpell[i] > 0)
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(quest->RewardDisplaySpell[i]);
- if (questGiver->isType(TYPEMASK_UNIT) && !spellInfo->HasEffect(DIFFICULTY_NONE, SPELL_EFFECT_LEARN_SPELL) && !spellInfo->HasEffect(DIFFICULTY_NONE, SPELL_EFFECT_CREATE_ITEM))
+ if (questGiver && questGiver->isType(TYPEMASK_UNIT) &&
+ !spellInfo->HasEffect(DIFFICULTY_NONE, SPELL_EFFECT_LEARN_SPELL) &&
+ !spellInfo->HasEffect(DIFFICULTY_NONE, SPELL_EFFECT_CREATE_ITEM))
{
if (Unit* unit = questGiver->ToUnit())
unit->CastSpell(this, quest->RewardDisplaySpell[i], true);
@@ -16904,8 +16909,11 @@ bool Player::IsQuestObjectiveComplete(QuestObjective const& objective) const
void Player::SetQuestObjectiveData(QuestObjective const& objective, int32 data)
{
if (objective.StorageIndex < 0)
+ {
TC_LOG_ERROR("entities.player.quest", "Player::SetQuestObjectiveData: called for quest %u with invalid StorageIndex %d (objective data is not tracked)",
objective.QuestID, objective.StorageIndex);
+ return;
+ }
auto itr = m_QuestStatus.find(objective.QuestID);