[Crash] Resolve crash when assigning empty raid note. (#3628)

* [Crash] Resolve crash when assigning empty raid note.

* const
This commit is contained in:
Aeadoin 2023-10-15 16:42:12 -04:00 committed by GitHub
parent 16ab1839e8
commit c203fec9b4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1707,34 +1707,31 @@ bool Raid::LearnMembers()
{
memset(members, 0, (sizeof(RaidMember) * MAX_RAID_MEMBERS));
const auto query = fmt::format(
"SELECT name, groupid, _class, level, "
"isgroupleader, israidleader, islooter, is_marker, is_assister, bot_id, note "
"FROM raid_members WHERE raidid = {} ORDER BY groupid",
GetID()
auto raid_members = RaidMembersRepository::GetWhere(
content_db,
fmt::format(
"raidid = {}",
GetID()
)
);
auto results = database.QueryDatabase(query);
if (!results.Success()) {
return false;
}
if (!results.RowCount()) {
if (raid_members.empty()) {
disbandCheck = true;
return false;
}
int i = 0;
for (auto row: results) {
if (!row[0]) {
for (const auto &e: raid_members) {
if (e.name.empty()) {
continue;
}
members[i].member = nullptr;
strn0cpy(members[i].member_name, row[0], sizeof(members[i].member_name));
// strn0cpy(members[i].note, row[10], sizeof(members[i].note));
members[i].note = std::string(row[10]);
uint32 group_id = Strings::ToUnsignedInt(row[1]);
strn0cpy(members[i].member_name, e.name.c_str(), sizeof(members[i].member_name));
uint32 group_id = e.groupid;
if (!e.note.empty()) {
members[i].note = e.note;
}
if (group_id >= MAX_RAID_GROUPS) {
members[i].group_number = RAID_GROUPLESS;
@ -1743,14 +1740,14 @@ bool Raid::LearnMembers()
members[i].group_number = group_id;
}
members[i]._class = Strings::ToUnsignedInt(row[2]);
members[i].level = Strings::ToUnsignedInt(row[3]);
members[i].is_group_leader = Strings::ToBool(row[4]);
members[i].is_raid_leader = Strings::ToBool(row[5]);
members[i].is_looter = Strings::ToBool(row[6]);
members[i].main_marker = Strings::ToUnsignedInt(row[7]);
members[i].main_assister = Strings::ToUnsignedInt(row[8]);
members[i].is_bot = Strings::ToBool(row[9]) > 0;
members[i]._class = e._class;
members[i].level = e.level;
members[i].is_group_leader = e.isgroupleader;
members[i].is_raid_leader = e.israidleader;
members[i].is_looter = e.islooter;
members[i].main_marker = e.is_marker;
members[i].main_assister = e.is_assister;
members[i].is_bot = e.bot_id > 0;
++i;
}
return true;