diff options
Diffstat (limited to 'src/game/ChatHandler.cpp')
-rw-r--r-- | src/game/ChatHandler.cpp | 77 |
1 files changed, 44 insertions, 33 deletions
diff --git a/src/game/ChatHandler.cpp b/src/game/ChatHandler.cpp index 106e445c245..082a4a6beac 100644 --- a/src/game/ChatHandler.cpp +++ b/src/game/ChatHandler.cpp @@ -40,6 +40,28 @@ #include "SpellAuras.h" #include "Util.h" +bool WorldSession::processChatmessageFurtherAfterSecurityChecks(std::string& msg, uint32 lang) +{ + if (lang != LANG_ADDON) + { + // strip invisible characters for non-addon messages + if(sWorld.getConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING)) + stripLineInvisibleChars(msg); + + if (sWorld.getConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_SEVERITY) && GetSecurity() < SEC_MODERATOR + && !ChatHandler(this).isValidChatMessage(msg.c_str())) + { + sLog.outError("Player %s (GUID: %u) sent a chatmessage with an invalid link: %s", GetPlayer()->GetName(), + GetPlayer()->GetGUIDLow(), msg.c_str()); + if (sWorld.getConfig(CONFIG_CHAT_STRICT_LINK_CHECKING_KICK)) + KickPlayer(); + return false; + } + } + + return true; +} + void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) { uint32 type; @@ -177,9 +199,8 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) if (ChatHandler(this).ParseCommands(msg.c_str()) > 0) break; - // strip invisible characters for non-addon messages - if (lang != LANG_ADDON && sWorld.getConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING)) - stripLineInvisibleChars(msg); + if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) + return; if(msg.empty()) break; @@ -198,9 +219,8 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) recv_data >> to; recv_data >> msg; - // strip invisible characters for non-addon messages - if (lang != LANG_ADDON && sWorld.getConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING)) - stripLineInvisibleChars(msg); + if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) + return; if(msg.empty()) break; @@ -257,9 +277,8 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) if (ChatHandler(this).ParseCommands(msg.c_str()) > 0) break; - // strip invisible characters for non-addon messages - if (lang != LANG_ADDON && sWorld.getConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING)) - stripLineInvisibleChars(msg); + if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) + return; if(msg.empty()) break; @@ -290,9 +309,8 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) if (ChatHandler(this).ParseCommands(msg.c_str()) > 0) break; - // strip invisible characters for non-addon messages - if (lang != LANG_ADDON && sWorld.getConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING)) - stripLineInvisibleChars(msg); + if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) + return; if(msg.empty()) break; @@ -328,9 +346,8 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) if (ChatHandler(this).ParseCommands(msg.c_str()) > 0) break; - // strip invisible characters for non-addon messages - if (lang != LANG_ADDON && sWorld.getConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING)) - stripLineInvisibleChars(msg); + if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) + return; if(msg.empty()) break; @@ -358,9 +375,8 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) if (ChatHandler(this).ParseCommands(msg.c_str()) > 0) break; - // strip invisible characters for non-addon messages - if (lang != LANG_ADDON && sWorld.getConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING)) - stripLineInvisibleChars(msg); + if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) + return; if(msg.empty()) break; @@ -390,9 +406,8 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) if (ChatHandler(this).ParseCommands(msg.c_str()) > 0) break; - // strip invisible characters for non-addon messages - if (lang != LANG_ADDON && sWorld.getConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING)) - stripLineInvisibleChars(msg); + if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) + return; if(msg.empty()) break; @@ -415,9 +430,8 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) std::string msg=""; recv_data >> msg; - // strip invisible characters for non-addon messages - if (lang != LANG_ADDON && sWorld.getConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING)) - stripLineInvisibleChars(msg); + if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) + return; if(msg.empty()) break; @@ -441,9 +455,8 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) std::string msg=""; recv_data >> msg; - // strip invisible characters for non-addon messages - if (lang != LANG_ADDON && sWorld.getConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING)) - stripLineInvisibleChars(msg); + if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) + return; if(msg.empty()) break; @@ -467,9 +480,8 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) std::string msg=""; recv_data >> msg; - // strip invisible characters for non-addon messages - if (lang != LANG_ADDON && sWorld.getConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING)) - stripLineInvisibleChars(msg); + if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) + return; if(msg.empty()) break; @@ -495,9 +507,8 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) recv_data >> msg; - // strip invisible characters for non-addon messages - if (lang != LANG_ADDON && sWorld.getConfig(CONFIG_CHAT_FAKE_MESSAGE_PREVENTING)) - stripLineInvisibleChars(msg); + if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) + return; if(msg.empty()) break; |