mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-17 09:33:51 +00:00
fix(combatlog): guard truncated spell energize packets
This commit is contained in:
parent
3ef5b546fb
commit
21762485ea
1 changed files with 16 additions and 8 deletions
|
|
@ -4012,14 +4012,22 @@ void GameHandler::handlePacket(network::Packet& packet) {
|
||||||
// TBC: full uint64 victim + uint64 caster + uint32 spellId + uint8 powerType + int32 amount
|
// TBC: full uint64 victim + uint64 caster + uint32 spellId + uint8 powerType + int32 amount
|
||||||
// Classic/Vanilla: packed_guid (same as WotLK)
|
// Classic/Vanilla: packed_guid (same as WotLK)
|
||||||
const bool energizeTbc = isActiveExpansion("tbc");
|
const bool energizeTbc = isActiveExpansion("tbc");
|
||||||
size_t rem = packet.getSize() - packet.getReadPos();
|
auto readEnergizeGuid = [&]() -> uint64_t {
|
||||||
if (rem < (energizeTbc ? 8u : 2u)) { packet.setReadPos(packet.getSize()); break; }
|
if (energizeTbc)
|
||||||
uint64_t victimGuid = energizeTbc
|
return (packet.getSize() - packet.getReadPos() >= 8) ? packet.readUInt64() : 0;
|
||||||
? packet.readUInt64() : UpdateObjectParser::readPackedGuid(packet);
|
return UpdateObjectParser::readPackedGuid(packet);
|
||||||
uint64_t casterGuid = energizeTbc
|
};
|
||||||
? packet.readUInt64() : UpdateObjectParser::readPackedGuid(packet);
|
if (packet.getSize() - packet.getReadPos() < (energizeTbc ? 8u : 1u)) {
|
||||||
rem = packet.getSize() - packet.getReadPos();
|
packet.setReadPos(packet.getSize()); break;
|
||||||
if (rem < 6) { packet.setReadPos(packet.getSize()); break; }
|
}
|
||||||
|
uint64_t victimGuid = readEnergizeGuid();
|
||||||
|
if (packet.getSize() - packet.getReadPos() < (energizeTbc ? 8u : 1u)) {
|
||||||
|
packet.setReadPos(packet.getSize()); break;
|
||||||
|
}
|
||||||
|
uint64_t casterGuid = readEnergizeGuid();
|
||||||
|
if (packet.getSize() - packet.getReadPos() < 9) {
|
||||||
|
packet.setReadPos(packet.getSize()); break;
|
||||||
|
}
|
||||||
uint32_t spellId = packet.readUInt32();
|
uint32_t spellId = packet.readUInt32();
|
||||||
uint8_t energizePowerType = packet.readUInt8();
|
uint8_t energizePowerType = packet.readUInt8();
|
||||||
int32_t amount = static_cast<int32_t>(packet.readUInt32());
|
int32_t amount = static_cast<int32_t>(packet.readUInt32());
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue