aboutsummaryrefslogtreecommitdiff
path: root/NorthstarDLL/server
diff options
context:
space:
mode:
authorpg9182 <96569817+pg9182@users.noreply.github.com>2023-01-05 17:03:37 -0500
committerGitHub <noreply@github.com>2023-01-05 23:03:37 +0100
commit33eb3254ba1f020f58d80ca91f557515f56ac628 (patch)
tree46b6d1fb3dd28a9c938dcd059a7c2fab6c376115 /NorthstarDLL/server
parentca2530b82578ca4bd782dbedaced5f02b3141d69 (diff)
downloadNorthstarLauncher-33eb3254ba1f020f58d80ca91f557515f56ac628.tar.gz
NorthstarLauncher-33eb3254ba1f020f58d80ca91f557515f56ac628.zip
Restrict chat message charset (#389)
Diffstat (limited to 'NorthstarDLL/server')
-rw-r--r--NorthstarDLL/server/serverchathooks.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/NorthstarDLL/server/serverchathooks.cpp b/NorthstarDLL/server/serverchathooks.cpp
index 57c2c31a..eb0034c0 100644
--- a/NorthstarDLL/server/serverchathooks.cpp
+++ b/NorthstarDLL/server/serverchathooks.cpp
@@ -34,12 +34,39 @@ void(__fastcall* MessageWriteByte)(int iValue);
void(__fastcall* MessageWriteString)(const char* sz);
void(__fastcall* MessageWriteBool)(bool bValue);
+static char* skip_valid_ansi_csi_sgr(char* str)
+{
+ if (*str++ != '\x1B')
+ return NULL;
+ if (*str++ != '[') // CSI
+ return NULL;
+ for (char* c = str; *c; c++)
+ {
+ if (*c >= '0' && *c <= '9')
+ continue;
+ if (*c == ';')
+ continue;
+ if (*c == 'm') // SGR
+ break;
+ return NULL;
+ }
+ return str;
+}
+
bool bShouldCallSayTextHook = false;
// clang-format off
AUTOHOOK(_CServerGameDLL__OnReceivedSayTextMessage, server.dll + 0x1595C0,
void, __fastcall, (CServerGameDLL* self, unsigned int senderPlayerId, const char* text, bool isTeam))
// clang-format on
{
+ for (char* c = const_cast<char*>(text); *c; c++)
+ {
+ if (*c == '\x1B' && (c = skip_valid_ansi_csi_sgr(c)))
+ c--;
+ else if (*c <= 9 || (*c >= 12 && *c <= 31))
+ *c = ' ';
+ }
+
// MiniHook doesn't allow calling the base function outside of anywhere but the hook function.
// To allow bypassing the hook, isSkippingHook can be set.
if (bShouldCallSayTextHook)