diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index 9cbb8752bedff1c55157d1bf9be1686b965a3c64..4c2579d2e04de6e7480e97cfc7ee8d7d880d95c7 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)