aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2019-05-29 23:02:40 +0200
committerShauren <shauren.trinity@gmail.com>2021-12-08 23:47:07 +0100
commit2cade0e6e3fb35192487882f7c4ada196866f39f (patch)
treed759bee64c6037385347e59b623b256c1496096f /src
parent97249ff7b4c70be76e9cf4a889b027ed9354071f (diff)
Core/Channel: Sanitize channel names
(cherry picked from commit 7b8f294c024230451f82ff67150e11fc31b61293)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Handlers/ChannelHandler.cpp9
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()))