[CRASH] Fix crash on CentOS when forming a raid with PCs or BOTs (#3676)

* [CRASH] Fix crash on CentOS

Update raid crash in CentOS.  raid constructors and learnmembers used a memset that was overwriting std::string structure.
Added default initializers to RaidMember struct

* Update based on feedback
This commit is contained in:
Mitch Freeman
2023-11-06 14:36:59 -04:00
committed by GitHub
parent d812310c5b
commit 0aadb891a1
2 changed files with 34 additions and 16 deletions
+20 -3
View File
@@ -40,7 +40,6 @@ extern WorldServer worldserver;
Raid::Raid(uint32 raidID)
: GroupIDConsumer(raidID)
{
memset(members ,0, (sizeof(RaidMember)*MAX_RAID_MEMBERS));
memset(&raid_aa, 0, sizeof(RaidLeadershipAA_Struct));
memset(group_aa, 0, sizeof(GroupLeadershipAA_Struct) * MAX_RAID_GROUPS);
for (auto& gm : group_mentor) {
@@ -66,7 +65,6 @@ Raid::Raid(uint32 raidID)
Raid::Raid(Client* nLeader)
: GroupIDConsumer()
{
memset(members ,0, (sizeof(RaidMember)*MAX_RAID_MEMBERS));
memset(&raid_aa, 0, sizeof(RaidLeadershipAA_Struct));
memset(group_aa, 0, sizeof(GroupLeadershipAA_Struct) * MAX_RAID_GROUPS);
for (auto& gm : group_mentor) {
@@ -1705,7 +1703,7 @@ void Raid::SaveRaidMOTD()
bool Raid::LearnMembers()
{
memset(members, 0, (sizeof(RaidMember) * MAX_RAID_MEMBERS));
EmptyRaidMembers();
auto raid_members = RaidMembersRepository::GetWhere(
database,
@@ -2975,3 +2973,22 @@ void Raid::SendMarkTargets(Client* c)
}
UpdateXtargetMarkedNPC();
}
void Raid::EmptyRaidMembers()
{
for (int i = 0; i < MAX_RAID_MEMBERS; i++) {
members[i].group_number = RAID_GROUPLESS;
members[i].is_group_leader = 0;
members[i].level = 0;
members[i].main_assister = 0;
members[i].main_marker = 0;
members[i]._class = 0;
members[i].is_bot = false;
members[i].is_looter = false;
members[i].is_raid_leader = false;
members[i].is_raid_main_assist_one = false;
members[i].member = nullptr;
members[i].note.clear();
members[i].member_name[0] = '\0';
}
}