(svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
authorDarkvater
Tue, 31 Oct 2006 21:15:56 +0000
changeset 5005 21e84e53c732
parent 5004 0fdfbb61f146
child 5006 5947e4569955
(svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
invalid players (eg spectators) which could lead to crashes.
airport_gui.c
dock_gui.c
industry_gui.c
main_gui.c
misc_gui.c
player_gui.c
rail_gui.c
road_gui.c
station_gui.c
terraform_gui.c
vehicle_gui.c
--- a/airport_gui.c	Tue Oct 31 17:13:12 2006 +0000
+++ b/airport_gui.c	Tue Oct 31 21:15:56 2006 +0000
@@ -133,7 +133,8 @@
 
 void ShowBuildAirToolbar(void)
 {
-	if (_current_player == PLAYER_SPECTATOR) return;
+	if (!IsValidPlayer(_current_player)) return;
+
 	DeleteWindowById(WC_BUILD_TOOLBAR, 0);
 	AllocateWindowDescFront(&_air_toolbar_desc, 0);
 	if (_patches.link_terraform_toolbar) ShowTerraformToolbar();
--- a/dock_gui.c	Tue Oct 31 17:13:12 2006 +0000
+++ b/dock_gui.c	Tue Oct 31 21:15:56 2006 +0000
@@ -214,7 +214,8 @@
 
 void ShowBuildDocksToolbar(void)
 {
-	if (_current_player == PLAYER_SPECTATOR) return;
+	if (!IsValidPlayer(_current_player)) return;
+
 	DeleteWindowById(WC_BUILD_TOOLBAR, 0);
 	AllocateWindowDesc(&_build_docks_toolbar_desc);
 	if (_patches.link_terraform_toolbar) ShowTerraformToolbar();
--- a/industry_gui.c	Tue Oct 31 17:13:12 2006 +0000
+++ b/industry_gui.c	Tue Oct 31 21:15:56 2006 +0000
@@ -268,7 +268,7 @@
 
 void ShowBuildIndustryWindow(void)
 {
-	if (_current_player == PLAYER_SPECTATOR) return;
+	if (!IsValidPlayer(_current_player)) return;
 	AllocateWindowDescFront(_industry_window_desc[_patches.build_rawmaterial_ind][_opt_ptr->landscape],0);
 }
 
--- a/main_gui.c	Tue Oct 31 17:13:12 2006 +0000
+++ b/main_gui.c	Tue Oct 31 21:15:56 2006 +0000
@@ -1821,30 +1821,26 @@
 	} break;
 
 	case WE_KEYPRESS: {
-		PlayerID local = (_local_player != PLAYER_SPECTATOR) ? _local_player : 0;
-
 		switch (e->we.keypress.keycode) {
-		case WKC_F1: case WKC_PAUSE:
-			ToolbarPauseClick(w);
-			break;
+		case WKC_F1: case WKC_PAUSE: ToolbarPauseClick(w); break;
 		case WKC_F2: ShowGameOptions(); break;
 		case WKC_F3: MenuClickSaveLoad(0); break;
 		case WKC_F4: ShowSmallMap(); break;
 		case WKC_F5: ShowTownDirectory(); break;
 		case WKC_F6: ShowSubsidiesList(); break;
-		case WKC_F7: ShowPlayerStations(local); break;
-		case WKC_F8: ShowPlayerFinances(local); break;
-		case WKC_F9: ShowPlayerCompany(local); break;
+		case WKC_F7: ShowPlayerStations(_local_player); break;
+		case WKC_F8: ShowPlayerFinances(_local_player); break;
+		case WKC_F9: ShowPlayerCompany(_local_player); break;
 		case WKC_F10:ShowOperatingProfitGraph(); break;
 		case WKC_F11: ShowCompanyLeagueTable(); break;
 		case WKC_F12: ShowBuildIndustryWindow(); break;
-		case WKC_SHIFT | WKC_F1: ShowVehicleListWindow(local, INVALID_STATION, VEH_Train); break;
-		case WKC_SHIFT | WKC_F2: ShowVehicleListWindow(local, INVALID_STATION, VEH_Road); break;
-		case WKC_SHIFT | WKC_F3: ShowVehicleListWindow(local, INVALID_STATION, VEH_Ship); break;
-		case WKC_SHIFT | WKC_F4: ShowVehicleListWindow(local, INVALID_STATION, VEH_Aircraft); break;
+		case WKC_SHIFT | WKC_F1: ShowVehicleListWindow(_local_player, INVALID_STATION, VEH_Train); break;
+		case WKC_SHIFT | WKC_F2: ShowVehicleListWindow(_local_player, INVALID_STATION, VEH_Road); break;
+		case WKC_SHIFT | WKC_F3: ShowVehicleListWindow(_local_player, INVALID_STATION, VEH_Ship); break;
+		case WKC_SHIFT | WKC_F4: ShowVehicleListWindow(_local_player, INVALID_STATION, VEH_Aircraft); break;
 		case WKC_SHIFT | WKC_F5: ToolbarZoomInClick(w); break;
 		case WKC_SHIFT | WKC_F6: ToolbarZoomOutClick(w); break;
-		case WKC_SHIFT | WKC_F7: ShowBuildRailToolbar(_last_built_railtype,-1); break;
+		case WKC_SHIFT | WKC_F7: ShowBuildRailToolbar(_last_built_railtype, -1); break;
 		case WKC_SHIFT | WKC_F8: ShowBuildRoadToolbar(); break;
 		case WKC_SHIFT | WKC_F9: ShowBuildDocksToolbar(); break;
 		case WKC_SHIFT | WKC_F10:ShowBuildAirToolbar(); break;
--- a/misc_gui.c	Tue Oct 31 17:13:12 2006 +0000
+++ b/misc_gui.c	Tue Oct 31 21:15:56 2006 +0000
@@ -450,6 +450,7 @@
 
 void ShowBuildTreesToolbar(void)
 {
+	if (!IsValidPlayer(_current_player)) return;
 	AllocateWindowDescFront(&_build_trees_desc, 0);
 }
 
--- a/player_gui.c	Tue Oct 31 17:13:12 2006 +0000
+++ b/player_gui.c	Tue Oct 31 21:15:56 2006 +0000
@@ -219,24 +219,24 @@
 	PlayerFinancesWndProc
 };
 
-static const WindowDesc * const desc_table[2*2] = {
-	&_player_finances_desc,&_player_finances_small_desc,
-	&_other_player_finances_desc,&_other_player_finances_small_desc,
-};
-
 static void DoShowPlayerFinances(PlayerID player, bool show_small, bool show_stickied)
 {
 	Window *w;
 	int mode;
 
+	static const WindowDesc * const desc_table[2 * 2] = {
+		&_player_finances_desc, &_player_finances_small_desc,
+		&_other_player_finances_desc, &_other_player_finances_small_desc,
+	};
+
+	if (!IsValidPlayer(player)) return;
+
 	mode = (player != _local_player) * 2 + show_small;
 	w = AllocateWindowDescFront(desc_table[mode], player);
 	if (w != NULL) {
 		w->caption_color = w->window_number;
 		WP(w,def_d).data_1 = mode;
-		if (show_stickied) {
-			w->flags4 |= WF_STICKY;
-		}
+		if (show_stickied) w->flags4 |= WF_STICKY;
 	}
 }
 
@@ -878,6 +878,8 @@
 {
 	Window *w;
 
+	if (!IsValidPlayer(player)) return;
+
 	w = AllocateWindowDescFront(&_player_company_desc, player);
 	if (w != NULL) w->caption_color = w->window_number;
 }
--- a/rail_gui.c	Tue Oct 31 17:13:12 2006 +0000
+++ b/rail_gui.c	Tue Oct 31 21:15:56 2006 +0000
@@ -589,7 +589,7 @@
 {
 	Window *w;
 
-	if (_current_player == PLAYER_SPECTATOR) return;
+	if (!IsValidPlayer(_current_player)) return;
 	if (!ValParamRailtype(railtype)) return;
 
 	// don't recreate the window if we're clicking on a button and the window exists.
--- a/road_gui.c	Tue Oct 31 17:13:12 2006 +0000
+++ b/road_gui.c	Tue Oct 31 21:15:56 2006 +0000
@@ -318,7 +318,8 @@
 
 void ShowBuildRoadToolbar(void)
 {
-	if (_current_player == PLAYER_SPECTATOR) return;
+	if (!IsValidPlayer(_current_player)) return;
+
 	DeleteWindowById(WC_BUILD_TOOLBAR, 0);
 	AllocateWindowDesc(&_build_road_desc);
 	if (_patches.link_terraform_toolbar) ShowTerraformToolbar();
--- a/station_gui.c	Tue Oct 31 17:13:12 2006 +0000
+++ b/station_gui.c	Tue Oct 31 21:15:56 2006 +0000
@@ -506,6 +506,8 @@
 {
 	Window *w;
 
+	if (!IsValidPlayer(player)) return;
+
 	w = AllocateWindowDescFront(&_player_stations_desc, player);
 	if (w != NULL) {
 		w->caption_color = (byte)w->window_number;
--- a/terraform_gui.c	Tue Oct 31 17:13:12 2006 +0000
+++ b/terraform_gui.c	Tue Oct 31 21:15:56 2006 +0000
@@ -274,6 +274,6 @@
 
 void ShowTerraformToolbar(void)
 {
-	if (_current_player == PLAYER_SPECTATOR) return;
+	if (!IsValidPlayer(_current_player)) return;
 	AllocateWindowDescFront(&_terraform_desc, 0);
 }
--- a/vehicle_gui.c	Tue Oct 31 17:13:12 2006 +0000
+++ b/vehicle_gui.c	Tue Oct 31 21:15:56 2006 +0000
@@ -1856,8 +1856,11 @@
 static void ShowVehicleListWindowLocal(PlayerID player, byte vehicle_type, StationID station, OrderID order, uint16 depot_airport_index)
 {
 	Window *w;
-	WindowNumber num = (vehicle_type << 11) | player;
+	WindowNumber num;
 
+	if (!IsValidPlayer(player)) return;
+
+	num = (vehicle_type << 11) | player;
 	if (order != INVALID_ORDER) {
 		num |= (order << 16) | VLW_SHARED_ORDERS;
 	} else if (depot_airport_index != INVALID_STATION) {