Guard the group-loot division by zero #1

Merged
yrtria merged 1 commit from fix/group-zero-guard into main 2026-09-03 11:21:54 -06:00

View file

@ -5,6 +5,9 @@
void GuildFunds::OnLootMoney(Player* player, uint32 gold) void GuildFunds::OnLootMoney(Player* player, uint32 gold)
{ {
if (LootMultiplier < 1)
return;
if (Group* group = player->GetGroup()) if (Group* group = player->GetGroup())
{ {
uint32 membersInRange = 0; uint32 membersInRange = 0;
@ -17,7 +20,10 @@ void GuildFunds::OnLootMoney(Player* player, uint32 gold)
} }
} }
if (LootMultiplier < 1) // Guard the division. In practice the looter counts themselves, but a group whose
// members all fail the distance check would divide by zero and take worldserver
// down with SIGFPE.
if (!membersInRange)
return; return;
uint32 money = (gold / membersInRange) * LootMultiplier / 100; uint32 money = (gold / membersInRange) * LootMultiplier / 100;
@ -49,7 +55,7 @@ void GuildFunds::OnLootMoney(Player* player, uint32 gold)
{ {
uint32 money = gold * LootMultiplier / 100; uint32 money = gold * LootMultiplier / 100;
if (money < 1 || LootMultiplier < 1) if (money < 1)
return; return;
guild->HandleMemberDepositMoney(player->GetSession(), money); guild->HandleMemberDepositMoney(player->GetSession(), money);