Merge pull request #1097 from SecretsOTheP/null_ptr_fixes

Null ptr fixes
This commit is contained in:
Chris Miles 2020-08-16 02:02:46 -05:00 committed by GitHub
commit ecf47a0bbb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 4 deletions

View File

@ -2476,7 +2476,7 @@ void EntityList::RemoveAllGroups()
while (group_list.size()) {
auto group = group_list.front();
group_list.pop_front();
delete group;
safe_delete(group);
}
#if EQDEBUG >= 5
CheckGroupList (__FILE__, __LINE__);
@ -2488,7 +2488,7 @@ void EntityList::RemoveAllRaids()
while (raid_list.size()) {
auto raid = raid_list.front();
raid_list.pop_front();
delete raid;
safe_delete(raid);
}
}
@ -2837,7 +2837,7 @@ bool EntityList::RemoveGroup(uint32 delete_id)
}
auto group = *it;
group_list.erase(it);
delete group;
safe_delete(group);
return true;
}
@ -2849,7 +2849,7 @@ bool EntityList::RemoveRaid(uint32 delete_id)
return false;
auto raid = *it;
raid_list.erase(it);
delete raid;
safe_delete(raid);
return true;
}

View File

@ -498,6 +498,9 @@ void Group::SendEndurancePacketFrom(Mob* member)
//if the group was in the zone already
bool Group::UpdatePlayer(Mob* update){
if (!update)
return false;
bool updateSuccess = false;
VerifyGroup();
@ -1009,6 +1012,7 @@ void Group::DisbandGroup(bool joinraid) {
Leader->UpdateLFP();
}
SetLeader(nullptr);
safe_delete(outapp);
}

View File

@ -279,6 +279,8 @@ void Raid::SetRaidLeader(const char *wasLead, const char *name)
Client *c = entity_list.GetClientByName(name);
if(c)
SetLeader(c);
else
SetLeader(nullptr); //sanity check, should never get hit but we want to prefer to NOT crash if we do VerifyRaid and leader never gets set there (raid without a leader?)
LearnMembers();
VerifyRaid();
@ -1549,6 +1551,11 @@ void Raid::VerifyRaid()
SetLeader(members[x].member);
strn0cpy(leadername, members[x].membername, 64);
}
else
{
//should never happen, but maybe it is?
SetLeader(nullptr);
}
}
}
}
@ -1558,6 +1565,11 @@ void Raid::MemberZoned(Client *c)
if(!c)
return;
if (leader == c)
{
leader = nullptr;
}
// Raid::GetGroup() goes over the members as well, this way we go over once
uint32 gid = RAID_GROUPLESS;
for(int x = 0; x < MAX_RAID_MEMBERS; x++)

View File

@ -857,12 +857,14 @@ void Zone::Shutdown(bool quiet)
while (!zone->npctable.empty()) {
itr = zone->npctable.begin();
delete itr->second;
itr->second = nullptr;
zone->npctable.erase(itr);
}
while (!zone->merctable.empty()) {
itr = zone->merctable.begin();
delete itr->second;
itr->second = nullptr;
zone->merctable.erase(itr);
}
@ -872,6 +874,7 @@ void Zone::Shutdown(bool quiet)
while (!zone->ldon_trap_list.empty()) {
itr4 = zone->ldon_trap_list.begin();
delete itr4->second;
itr4->second = nullptr;
zone->ldon_trap_list.erase(itr4);
}
zone->ldon_trap_entry_list.clear();
@ -1707,6 +1710,7 @@ bool Zone::Depop(bool StartSpawnTimer) {
while(!npctable.empty()) {
itr = npctable.begin();
delete itr->second;
itr->second = nullptr;
npctable.erase(itr);
}
@ -1723,6 +1727,7 @@ void Zone::ClearNPCTypeCache(int id) {
auto iter = npctable.begin();
while (iter != npctable.end()) {
delete iter->second;
iter->second = nullptr;
++iter;
}
npctable.clear();
@ -1732,6 +1737,7 @@ void Zone::ClearNPCTypeCache(int id) {
while (iter != npctable.end()) {
if (iter->first == (uint32)id) {
delete iter->second;
iter->second = nullptr;
npctable.erase(iter);
return;
}