aboutsummaryrefslogtreecommitdiff
path: root/src/game/ChatHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/ChatHandler.cpp')
-rw-r--r--src/game/ChatHandler.cpp77
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;