diff options
Diffstat (limited to 'src/server/game/Handlers/ChannelHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/ChannelHandler.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/server/game/Handlers/ChannelHandler.cpp b/src/server/game/Handlers/ChannelHandler.cpp index be163d343cc..bb6eab2565e 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_PASS_STR = 31; @@ -57,6 +58,15 @@ void WorldSession::HandleJoinChannel(WorldPacket& recvPacket) return; } + if (!utf8::is_valid(channelName.begin(), 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(channelName)) + return; + if (ChannelMgr* cMgr = ChannelMgr::forTeam(GetPlayer()->GetTeam())) if (Channel* channel = cMgr->GetJoinChannel(channelId, channelName, zone)) channel->JoinChannel(GetPlayer(), password); |