From b321d05386bdff912a5a5cc84dcff27bb55bea99 Mon Sep 17 00:00:00 2001 From: Treeston Date: Tue, 18 Sep 2018 16:55:58 +0200 Subject: Core/Chat: Fix chat filter to not block certain non-ASCII characters (cherry picked from commit b4258ca4d93df75520be7e731280d00fae665d6d) --- src/server/game/Handlers/ChatHandler.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index a2bb1951c41..ede014c8f88 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -43,25 +43,30 @@ #include "WorldPacket.h" #include -inline bool isNasty(char c) +inline bool isNasty(uint8 c) { - if (c < 32) // all of these are control characters - return true; - if (c == 127) // ascii delete - return true; - if (uint8(c) == 255) // non-breaking whitespace + if (c == '\t') + return false; + if (c <= '\037') // ASCII control block return true; return false; } inline bool ValidateMessage(Player const* player, std::string& msg) { + // cut at the first newline or carriage return + std::string::size_type pos = msg.find_first_of("\n\r"); + if (pos == 0) + return false; + else if (pos != std::string::npos) + msg.erase(pos); + // abort on any sort of nasty character - for (char c : msg) + for (uint8 c : msg) { if (isNasty(c)) { - TC_LOG_ERROR("network", "Player %s (%s) sent a message containing control character %u - blocked", player->GetName().c_str(), + TC_LOG_ERROR("network", "Player %s (%s) sent a message containing invalid character %u - blocked", player->GetName().c_str(), player->GetGUID().ToString().c_str(), uint32(c)); return false; } -- cgit v1.2.3