From 19f82280584b326b027ace76055c005a39b941ff Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Sun, 21 Feb 2021 22:51:01 -0500 Subject: [PATCH] Tweak Sanitizer --- libreborn/include/libreborn/libreborn.h | 2 +- libreborn/src/libreborn.c | 5 ++++- mods/src/chat/chat.cpp | 2 +- mods/src/misc/misc.cpp | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/libreborn/include/libreborn/libreborn.h b/libreborn/include/libreborn/libreborn.h index 7bb402c..4c76b84 100644 --- a/libreborn/include/libreborn/libreborn.h +++ b/libreborn/include/libreborn/libreborn.h @@ -36,7 +36,7 @@ extern "C" { __attribute__((__used__)) return_type name args // Sanitize String -void sanitize_string(char **str, int max_length); +void sanitize_string(char **str, int max_length, unsigned int allow_newlines); // Patching Functions diff --git a/libreborn/src/libreborn.c b/libreborn/src/libreborn.c index c0eb346..df42f68 100644 --- a/libreborn/src/libreborn.c +++ b/libreborn/src/libreborn.c @@ -214,7 +214,7 @@ void _patch_address(const char *file, int line, void *start, void *target) { // Sanitize String #define MINIMUM_MESSAGE_CHARACTER 32 #define MAXIMUM_MESSAGE_CHARACTER 126 -void sanitize_string(char **str, int max_length) { +void sanitize_string(char **str, int max_length, unsigned int allow_newlines) { // Store Message Length int length = strlen(*str); // Truncate Message @@ -224,6 +224,9 @@ void sanitize_string(char **str, int max_length) { } // Loop Through Message for (int i = 0; i < length; i++) { + if (allow_newlines && ((*str)[i] == '\n' || (*str)[i] == '\r')) { + continue; + } if ((*str)[i] < MINIMUM_MESSAGE_CHARACTER || (*str)[i] > MAXIMUM_MESSAGE_CHARACTER) { // Replace Illegal Character (*str)[i] = '?'; diff --git a/mods/src/chat/chat.cpp b/mods/src/chat/chat.cpp index 02d17e4..fb5d400 100644 --- a/mods/src/chat/chat.cpp +++ b/mods/src/chat/chat.cpp @@ -39,7 +39,7 @@ static void send_message(unsigned char *server_side_network_handler, char *usern char *full_message = NULL; asprintf(&full_message, "<%s> %s", username, message); ALLOC_CHECK(full_message); - sanitize_string(&full_message, MAX_CHAT_MESSAGE_LENGTH); + sanitize_string(&full_message, MAX_CHAT_MESSAGE_LENGTH, 0); (*ServerSideNetworkHandler_displayGameMessage)(server_side_network_handler, std::string(full_message)); free(full_message); } diff --git a/mods/src/misc/misc.cpp b/mods/src/misc/misc.cpp index a130fef..39a491b 100644 --- a/mods/src/misc/misc.cpp +++ b/mods/src/misc/misc.cpp @@ -74,7 +74,7 @@ static void Gui_addMessage_injection(unsigned char *gui, std::string const& text // Sanitize Message char *new_message = strdup(text.c_str()); ALLOC_CHECK(new_message); - sanitize_string(&new_message, -1); + sanitize_string(&new_message, -1, 1); // Process Message if (!Gui_addMessage_recursing) {