aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server/Packets
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-07-28 00:07:19 +0200
committerShauren <shauren.trinity@gmail.com>2019-07-28 00:07:19 +0200
commitf2ef5f878df7c9536736684251fe86f456fc7590 (patch)
tree574bcd335c99f8fc44d41875ed6246fb55d3e462 /src/server/game/Server/Packets
parent168fd207094bcb8cf9c117ed4d2800d4187500c0 (diff)
Core/PacketIO: Added missing packet array size checks
Diffstat (limited to 'src/server/game/Server/Packets')
-rw-r--r--src/server/game/Server/Packets/ClientConfigPackets.cpp3
-rw-r--r--src/server/game/Server/Packets/GuildPackets.cpp11
-rw-r--r--src/server/game/Server/Packets/GuildPackets.h2
-rw-r--r--src/server/game/Server/Packets/LootPackets.h2
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