Last active
August 29, 2015 14:22
-
-
Save Warpten/51dc97800b77dc72ed42 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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