diff options
| author | Shauren <shauren.trinity@gmail.com> | 2019-07-28 00:07:19 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2019-07-28 00:07:19 +0200 |
| commit | f2ef5f878df7c9536736684251fe86f456fc7590 (patch) | |
| tree | 574bcd335c99f8fc44d41875ed6246fb55d3e462 /src/server/game/Server | |
| parent | 168fd207094bcb8cf9c117ed4d2800d4187500c0 (diff) | |
Core/PacketIO: Added missing packet array size checks
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/ClientConfigPackets.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/GuildPackets.cpp | 11 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/GuildPackets.h | 2 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/LootPackets.h | 2 |
4 files changed, 8 insertions, 10 deletions
diff --git a/src/server/game/Server/Packets/ClientConfigPackets.cpp b/src/server/game/Server/Packets/ClientConfigPackets.cpp index a18d8c2627c..2cc1efa8d0c 100644 --- a/src/server/game/Server/Packets/ClientConfigPackets.cpp +++ b/src/server/game/Server/Packets/ClientConfigPackets.cpp @@ -59,6 +59,9 @@ void WorldPackets::ClientConfig::UserClientUpdateAccountData::Read() DataType = _worldPacket.ReadBits(3); uint32 compressedSize = _worldPacket.read<uint32>(); + if (compressedSize > _worldPacket.size() - _worldPacket.rpos()) + throw ByteBufferPositionException(_worldPacket.rpos(), _worldPacket.size(), compressedSize); + if (compressedSize) { CompressedData.resize(compressedSize); diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp index 1e074cb3025..20fb6f40ae0 100644 --- a/src/server/game/Server/Packets/GuildPackets.cpp +++ b/src/server/game/Server/Packets/GuildPackets.cpp @@ -807,15 +807,10 @@ WorldPacket const* WorldPackets::Guild::PlayerSaveGuildEmblem::Write() void WorldPackets::Guild::GuildSetAchievementTracking::Read() { - uint32 count; - _worldPacket >> count; + AchievementIDs.resize(_worldPacket.read<uint32>()); - for (uint32 i = 0; i < count; ++i) - { - uint32 value; - _worldPacket >> value; - AchievementIDs.insert(value); - } + for (uint32& achievementID : AchievementIDs) + _worldPacket >> achievementID; } WorldPacket const* WorldPackets::Guild::GuildNameChanged::Write() diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h index b72d4857d48..9a3b70df911 100644 --- a/src/server/game/Server/Packets/GuildPackets.h +++ b/src/server/game/Server/Packets/GuildPackets.h @@ -1018,7 +1018,7 @@ namespace WorldPackets void Read() override; - std::set<uint32> AchievementIDs; + Array<uint32, 10> AchievementIDs; }; class GuildNameChanged final : ServerPacket diff --git a/src/server/game/Server/Packets/LootPackets.h b/src/server/game/Server/Packets/LootPackets.h index adacd5c0fb7..115851711a9 100644 --- a/src/server/game/Server/Packets/LootPackets.h +++ b/src/server/game/Server/Packets/LootPackets.h @@ -89,7 +89,7 @@ namespace WorldPackets void Read() override; - std::vector<LootRequest> Loot; + Array<LootRequest, 1000> Loot; }; class LootRemoved final : public ServerPacket |
