From c2884612cedb33c12e3a0c30883903efd6d700e0 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 22 May 2023 11:58:50 +0200 Subject: Core/Players: Fixed crashes with char enum packet if equipment cache field does not have correct format --- src/server/game/Server/Packets/CharacterPackets.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src') 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(equipment[visualBase + 0]).value_or(0); VisualItems[slot].DisplayID = Trinity::StringTo(equipment[visualBase + 1]).value_or(0); VisualItems[slot].DisplayEnchantID = Trinity::StringTo(equipment[visualBase + 2]).value_or(0); -- cgit v1.2.3