From cd6b1b2cd955d0b5a6c70dbc80b5356696fbd4bc Mon Sep 17 00:00:00 2001
From: toaster <rollerorbital@gmail.com>
Date: Tue, 14 Jun 2022 21:42:41 +0100
Subject: [PATCH] Enforce MAX_REASONLENGTH when reading ban.txt.

---
 src/d_clisrv.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index 9cbb8752b..4c2579d2e 100644
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -2761,9 +2761,9 @@ static void Command_ClearBans(void)
 void D_LoadBan(boolean warning)
 {
 	FILE *f;
-	size_t i;
-	const char *address, *mask;
-	const char *username, *reason;
+	size_t i, j;
+	char *address, *mask;
+	char *username, *reason;
 	time_t unbanTime = NO_BAN_TIME;
 	char buffer[MAX_WADPATH];
 	boolean banmode = 0;
@@ -2817,6 +2817,19 @@ void D_LoadBan(boolean warning)
 			reason = strtok(NULL, "\"\r\n"); // go until next "
 		}
 
+		// Enforce MAX_REASONLENGTH.
+		if (reason)
+		{
+			j = 0;
+			while (reason[j] != '\0')
+			{
+				if ((j++) < MAX_REASONLENGTH)
+					continue;
+				reason[j] = '\0';
+				break;
+			}
+		}
+
 		I_SetBanAddress(address, mask);
 
 		if (I_SetUnbanTime)
-- 
GitLab