Skip to content

Instantly share code, notes, and snippets.

@Warpten
Last active August 29, 2015 14:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Warpten/51dc97800b77dc72ed42 to your computer and use it in GitHub Desktop.
Save Warpten/51dc97800b77dc72ed42 to your computer and use it in GitHub Desktop.
commit c905d1a6b7be3d0cdfdab0e8c4db267e01c68684
Author: Warpten <vertozor@gmail.com>
Date: Wed May 27 20:54:57 2015 +0200
Core/NetworkIO: Fixed possible DDoS issue with b5aebf40a8a6f4b480ba2e877451db2ac3dac968
diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp
index 4204278..ab4108b 100644
--- a/src/server/game/Server/Packets/ChatPackets.cpp
+++ b/src/server/game/Server/Packets/ChatPackets.cpp
@@ -238,10 +238,8 @@ void WorldPackets::Chat::ChatRegisterAddonPrefixes::Read()
{
int32 count;
_worldPacket >> count;
+ Overflown = count > REGISTERED_ADDON_PREFIX_SOFTCAP;
- for (int32 i = 0; i < count; ++i)
- {
- uint32 lenghts = _worldPacket.ReadBits(5);
- Prefixes.push_back(_worldPacket.ReadString(lenghts));
- }
+ for (int32 i = 0; i < (Overflown ? REGISTERED_ADDON_PREFIX_SOFTCAP : count); ++i)
+ Prefixes.push_back(_worldPacket.ReadString(_worldPacket.ReadBits(5)));
}
diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h
index c8bb038..b8774eb 100644
--- a/src/server/game/Server/Packets/ChatPackets.h
+++ b/src/server/game/Server/Packets/ChatPackets.h
@@ -259,6 +259,7 @@ namespace WorldPackets
void Read() override;
std::vector<std::string> Prefixes;
+ bool Overflown;
};
class ChatUnregisterAllAddonPrefixes final : public ClientPacket
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 650e100..6105bdc 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -921,23 +921,11 @@ void WorldSession::HandleUnregisterAllAddonPrefixesOpcode(WorldPackets::Chat::Ch
void WorldSession::HandleAddonRegisteredPrefixesOpcode(WorldPackets::Chat::ChatRegisterAddonPrefixes& packet)
{
// This is always sent after CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES
-
- if (packet.Prefixes.size() > REGISTERED_ADDON_PREFIX_SOFTCAP)
- {
- // if we have hit the softcap (64) nothing should be filtered
- _filterAddonMessages = false;
+ _filterAddonMessages = !packet.Overflown;
+ if (packet.Overflown)
return;
- }
_registeredAddonPrefixes.insert(_registeredAddonPrefixes.end(), packet.Prefixes.begin(), packet.Prefixes.end());
-
- if (_registeredAddonPrefixes.size() > REGISTERED_ADDON_PREFIX_SOFTCAP) // shouldn't happen
- {
- _filterAddonMessages = false;
- return;
- }
-
- _filterAddonMessages = true;
}
void WorldSession::SetPlayer(Player* player)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment