diff options
Diffstat (limited to 'src/server/game/Handlers/ChannelHandler.cpp')
-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())) |