From 2b636adc2f014c53720d4a578b0eb28dbdacb8f7 Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Sun, 28 Jul 2024 15:40:21 -0400 Subject: [PATCH] fix(Core/AchievementMgr): Check for null achievement before being derefenced. (#19504) * Init. * Reviewed changes. --- src/server/game/Achievements/AchievementMgr.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 13072d3c2..37ed221ee 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -2473,10 +2473,15 @@ bool AchievementGlobalMgr::IsStatisticAchievement(AchievementEntry const* achiev bool AchievementGlobalMgr::IsAverageCriteria(AchievementCriteriaEntry const* criteria) const { - if ((sAchievementStore.LookupEntry(criteria->referredAchievement))->flags & ACHIEVEMENT_FLAG_AVERAGE) + auto referencedAchievement = sAchievementStore.LookupEntry(criteria->referredAchievement); + + if (!referencedAchievement) + return false; + + if (referencedAchievement->flags & ACHIEVEMENT_FLAG_AVERAGE) return true; - if (AchievementEntryList const* achRefList = GetAchievementByReferencedId(criteria->referredAchievement)) + if (AchievementEntryList const* achRefList = GetAchievementByReferencedId(referencedAchievement->ID)) for (AchievementEntryList::const_iterator itr = achRefList->begin(); itr != achRefList->end(); ++itr) if ((*itr)->flags & ACHIEVEMENT_FLAG_AVERAGE) return true;