diff options
author | jackpoz <giacomopoz@gmail.com> | 2019-05-29 23:02:40 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-08 23:47:07 +0100 |
commit | 2cade0e6e3fb35192487882f7c4ada196866f39f (patch) | |
tree | d759bee64c6037385347e59b623b256c1496096f | |
parent | 97249ff7b4c70be76e9cf4a889b027ed9354071f (diff) |
Core/Channel: Sanitize channel names
(cherry picked from commit 7b8f294c024230451f82ff67150e11fc31b61293)
-rw-r--r-- | src/server/game/Handlers/ChannelHandler.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/server/game/Handlers/ChannelHandler.cpp b/src/server/game/Handlers/ChannelHandler.cpp index 191f906cbdd..b85eb83eefc 100644 --- a/src/server/game/Handlers/ChannelHandler.cpp +++ b/src/server/game/Handlers/ChannelHandler.cpp @@ -24,6 +24,7 @@ #include "ObjectMgr.h" // for normalizePlayerName #include "Player.h" #include <cctype> +#include <utf8.h> static size_t const MAX_CHANNEL_NAME_STR = 0x31; static size_t const MAX_CHANNEL_PASS_STR = 31; @@ -47,7 +48,13 @@ void WorldSession::HandleJoinChannel(WorldPackets::Channel::JoinChannel& packet) if (packet.ChannelName.empty()) return; - if (isdigit((unsigned char)packet.ChannelName[0])) + if (!utf8::is_valid(packet.ChannelName.begin(), packet.ChannelName.end())) + { + TC_LOG_ERROR("network", "Player %s tried to create a channel with an invalid UTF8 sequence - blocked", GetPlayer()->GetGUID().ToString().c_str()); + return; + } + + if (!ValidateHyperlinksAndMaybeKick(packet.ChannelName)) return; if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam())) |