aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-05-22 11:58:50 +0200
committerShauren <shauren.trinity@gmail.com>2023-05-22 11:58:50 +0200
commitc2884612cedb33c12e3a0c30883903efd6d700e0 (patch)
tree136beecf9dc7dad5dbff524e1345aaccdc0aac24 /src
parentc76d96edfb27cfd76c52a6e3b4d072b0b5826957 (diff)
Core/Players: Fixed crashes with char enum packet if equipment cache field does not have correct format
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp
index 3d84f568498..47dc87aabd6 100644
--- a/src/server/game/Server/Packets/CharacterPackets.cpp
+++ b/src/server/game/Server/Packets/CharacterPackets.cpp
@@ -141,9 +141,11 @@ EnumCharactersResult::CharacterInfo::CharacterInfo(Field* fields)
LastLoginVersion = fields[22].GetUInt32();
- for (uint8 slot = 0; slot < REAGENT_BAG_SLOT_END; ++slot)
+ constexpr std::size_t equipmentFieldsPerSlot = 5;
+
+ for (std::size_t slot = 0; slot < VisualItems.size() && (slot + 1) * equipmentFieldsPerSlot <= equipment.size(); ++slot)
{
- uint32 visualBase = slot * 5;
+ std::size_t visualBase = slot * equipmentFieldsPerSlot;
VisualItems[slot].InvType = Trinity::StringTo<uint8>(equipment[visualBase + 0]).value_or(0);
VisualItems[slot].DisplayID = Trinity::StringTo<uint32>(equipment[visualBase + 1]).value_or(0);
VisualItems[slot].DisplayEnchantID = Trinity::StringTo<uint32>(equipment[visualBase + 2]).value_or(0);