diff -r 08b3b987bdc0 src/networkshared.cpp
--- a/src/networkshared.cpp	Sat Jan 31 19:31:50 2015 +0200
+++ b/src/networkshared.cpp	Sun Feb 08 02:47:52 2015 +0100
@@ -924,9 +924,9 @@
 			
 			// Add the ban reason.
 			if ( strlen( _ipVector[ulIdx].szComment ) )
-				sprintf( szMessage, "%s (%s)", szMessage,  _ipVector[ulIdx].szComment );
+				sprintf( szMessage + strlen( szMessage ), " (%s)", _ipVector[ulIdx].szComment );
 
-			sprintf( szMessage, "%s has expired", szMessage );
+			sprintf( szMessage + strlen( szMessage ), " has expired" );
 
 			// If the entry expired while the server was offline, say when it expired.
 			if ( _ipVector[ulIdx].tExpirationDate - tNow <= -3 )
@@ -936,7 +936,7 @@
 
 				pTimeInfo = localtime( &_ipVector[ulIdx].tExpirationDate );
 				strftime( szDate, 32, "%m/%d/%Y %H:%M", pTimeInfo);
-				sprintf( szMessage, "%s (ended on %s)", szMessage, szDate );
+				sprintf( szMessage + strlen( szMessage ), " (ended on %s)", szDate );
 			} 
 				
 			Printf( "%s.\n", szMessage );
@@ -1138,12 +1138,12 @@
 	szOutString[0] = 0;
 	if ( pszPlayerName && strlen( pszPlayerName ))
 	{
-		sprintf( szOutString, "%s", szOutString );
+		sprintf( szOutString, "%s", pszPlayerName );
 		if ( pszComment && strlen( pszComment ))
-			sprintf( szOutString, "%s:", szOutString );
+			sprintf( szOutString + strlen( szOutString ), ":%s", pszComment );
 	}
-	if ( pszComment )
-		sprintf( szOutString, "%s%s", szOutString, pszComment );
+	else if ( pszComment && strlen( pszComment ))
+		sprintf( szOutString, "%s", pszComment );
 
 	// Address is already in the list.
 	ulIdx = doesEntryExist( pszIP0, pszIP1, pszIP2, pszIP3 );
@@ -1188,13 +1188,19 @@
 
 			pTimeInfo = localtime( &tExpiration );
 			strftime( szDate, 32, "%m/%d/%Y %H:%M", pTimeInfo);
-			sprintf( szOutString, "%s<%s>", szOutString, szDate );
+			sprintf( szOutString + strlen( szOutString ), "<%s>", szDate );
 		}
 
 		if ( pszPlayerName && strlen( pszPlayerName ))
-			sprintf( szOutString, "%s:%s", szOutString, pszPlayerName );
+			sprintf( szOutString + strlen( szOutString ), ":%s", pszPlayerName );
 		if ( pszComment && strlen( pszComment ))
-			sprintf( szOutString, "%s:%s", szOutString, pszComment );
+		{
+			// [EP] This isn't a clean code, but makes sure there's no buffer overflow.
+			size_t temp = strlen(szOutString);
+			szOutString[temp] = ':';
+			strncpy( szOutString + temp + 1, pszComment, 511-temp );
+			szOutString[511] = 0;
+		}
 		fputs( szOutString, pFile );
 		fclose( pFile );
 
@@ -1212,7 +1218,7 @@
 	}
 
 	if ( pszComment )
-		delete pszComment;
+		delete[] pszComment;
 }
 
 //*****************************************************************************
