(svn r1104) -Fix: nasty server crash buffer overflow problem when using release build. Big thanks to Truelight for the guidance in fixing this very annoying bug!
authordarkvater
Wed, 15 Dec 2004 20:08:01 +0000
changeset 667 0a95b09599ac
parent 666 8330fb03b6e1
child 668 346853c8b513
(svn r1104) -Fix: nasty server crash buffer overflow problem when using release build. Big thanks to Truelight for the guidance in fixing this very annoying bug!
-VS.NET now treats warnings as errors too in the release build.
network_server.c
ttd.vcproj
--- a/network_server.c	Wed Dec 15 17:40:12 2004 +0000
+++ b/network_server.c	Wed Dec 15 20:08:01 2004 +0000
@@ -1186,24 +1186,20 @@
 
 	ci = NetworkFindClientInfoFromIndex(NETWORK_SERVER_INDEX);
 	// Register local player (if not dedicated)
-	if (ci != NULL && _local_player < MAX_PLAYERS) {
-		snprintf(_network_player_info[ci->client_playas-1].players, sizeof(_network_player_info[ci->client_playas-1].players), "%s", ci->client_name);
-	}
+	if (ci != NULL && ci->client_playas > 0  && ci->client_playas <= MAX_PLAYERS)
+		ttd_strlcpy(_network_player_info[ci->client_playas-1].players, ci->client_name, sizeof(_network_player_info[ci->client_playas-1].players));
 
 	FOR_ALL_CLIENTS(cs) {
 		char client_name[NETWORK_NAME_LENGTH];
-		char temp[NETWORK_PLAYERS_LENGTH];
 
 		NetworkGetClientName(client_name, sizeof(client_name), cs);
 
 		ci = DEREF_CLIENT_INFO(cs);
-		if (ci != NULL && ci->client_playas <= MAX_PLAYERS) {
-			if (_network_player_info[ci->client_playas-1].players[0] == '\0')
-				snprintf(_network_player_info[ci->client_playas-1].players, sizeof(_network_player_info[ci->client_playas-1].players), "%s", client_name);
-			else {
-				snprintf(temp, sizeof(temp), "%s, %s", _network_player_info[ci->client_playas-1].players, client_name);
-				snprintf(_network_player_info[ci->client_playas-1].players, sizeof(_network_player_info[ci->client_playas-1].players), "%s", temp);
-			}
+		if (ci != NULL && ci->client_playas > 0 && ci->client_playas <= MAX_PLAYERS) {
+			if (strlen(_network_player_info[ci->client_playas-1].players) != 0)
+				strncat(_network_player_info[ci->client_playas-1].players, ", ", sizeof(_network_player_info[ci->client_playas-1].players));
+				
+			strncat(_network_player_info[ci->client_playas-1].players, client_name, sizeof(_network_player_info[ci->client_playas-1].players));
 		}
 	}
 }
--- a/ttd.vcproj	Wed Dec 15 17:40:12 2004 +0000
+++ b/ttd.vcproj	Wed Dec 15 20:08:01 2004 +0000
@@ -45,6 +45,7 @@
 				ProgramDataBaseFileName=".\Release/"
 				BrowseInformation="1"
 				WarningLevel="3"
+				WarnAsError="TRUE"
 				SuppressStartupBanner="TRUE"
 				DebugInformationFormat="3"
 				CompileAs="1"/>
@@ -118,6 +119,7 @@
 				ProgramDataBaseFileName=".\Checked/"
 				BrowseInformation="1"
 				WarningLevel="3"
+				WarnAsError="TRUE"
 				SuppressStartupBanner="TRUE"
 				DebugInformationFormat="3"
 				CallingConvention="1"