mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r7022) -Fix [FS#292]: Properly guard against viewing company-sensitive information from
invalid players (eg spectators) which could lead to crashes.
This commit is contained in:
parent
993cb13c8d
commit
eadf788cc5
|
@ -133,7 +133,8 @@ static const WindowDesc _air_toolbar_desc = {
|
||||||
|
|
||||||
void ShowBuildAirToolbar(void)
|
void ShowBuildAirToolbar(void)
|
||||||
{
|
{
|
||||||
if (_current_player == PLAYER_SPECTATOR) return;
|
if (!IsValidPlayer(_current_player)) return;
|
||||||
|
|
||||||
DeleteWindowById(WC_BUILD_TOOLBAR, 0);
|
DeleteWindowById(WC_BUILD_TOOLBAR, 0);
|
||||||
AllocateWindowDescFront(&_air_toolbar_desc, 0);
|
AllocateWindowDescFront(&_air_toolbar_desc, 0);
|
||||||
if (_patches.link_terraform_toolbar) ShowTerraformToolbar();
|
if (_patches.link_terraform_toolbar) ShowTerraformToolbar();
|
||||||
|
|
|
@ -214,7 +214,8 @@ static const WindowDesc _build_docks_toolbar_desc = {
|
||||||
|
|
||||||
void ShowBuildDocksToolbar(void)
|
void ShowBuildDocksToolbar(void)
|
||||||
{
|
{
|
||||||
if (_current_player == PLAYER_SPECTATOR) return;
|
if (!IsValidPlayer(_current_player)) return;
|
||||||
|
|
||||||
DeleteWindowById(WC_BUILD_TOOLBAR, 0);
|
DeleteWindowById(WC_BUILD_TOOLBAR, 0);
|
||||||
AllocateWindowDesc(&_build_docks_toolbar_desc);
|
AllocateWindowDesc(&_build_docks_toolbar_desc);
|
||||||
if (_patches.link_terraform_toolbar) ShowTerraformToolbar();
|
if (_patches.link_terraform_toolbar) ShowTerraformToolbar();
|
||||||
|
|
|
@ -268,7 +268,7 @@ static const WindowDesc * const _industry_window_desc[2][4] = {
|
||||||
|
|
||||||
void ShowBuildIndustryWindow(void)
|
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);
|
AllocateWindowDescFront(_industry_window_desc[_patches.build_rawmaterial_ind][_opt_ptr->landscape],0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
22
main_gui.c
22
main_gui.c
|
@ -1821,30 +1821,26 @@ static void MainToolbarWndProc(Window *w, WindowEvent *e)
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case WE_KEYPRESS: {
|
case WE_KEYPRESS: {
|
||||||
PlayerID local = (_local_player != PLAYER_SPECTATOR) ? _local_player : 0;
|
|
||||||
|
|
||||||
switch (e->we.keypress.keycode) {
|
switch (e->we.keypress.keycode) {
|
||||||
case WKC_F1: case WKC_PAUSE:
|
case WKC_F1: case WKC_PAUSE: ToolbarPauseClick(w); break;
|
||||||
ToolbarPauseClick(w);
|
|
||||||
break;
|
|
||||||
case WKC_F2: ShowGameOptions(); break;
|
case WKC_F2: ShowGameOptions(); break;
|
||||||
case WKC_F3: MenuClickSaveLoad(0); break;
|
case WKC_F3: MenuClickSaveLoad(0); break;
|
||||||
case WKC_F4: ShowSmallMap(); break;
|
case WKC_F4: ShowSmallMap(); break;
|
||||||
case WKC_F5: ShowTownDirectory(); break;
|
case WKC_F5: ShowTownDirectory(); break;
|
||||||
case WKC_F6: ShowSubsidiesList(); break;
|
case WKC_F6: ShowSubsidiesList(); break;
|
||||||
case WKC_F7: ShowPlayerStations(local); break;
|
case WKC_F7: ShowPlayerStations(_local_player); break;
|
||||||
case WKC_F8: ShowPlayerFinances(local); break;
|
case WKC_F8: ShowPlayerFinances(_local_player); break;
|
||||||
case WKC_F9: ShowPlayerCompany(local); break;
|
case WKC_F9: ShowPlayerCompany(_local_player); break;
|
||||||
case WKC_F10:ShowOperatingProfitGraph(); break;
|
case WKC_F10:ShowOperatingProfitGraph(); break;
|
||||||
case WKC_F11: ShowCompanyLeagueTable(); break;
|
case WKC_F11: ShowCompanyLeagueTable(); break;
|
||||||
case WKC_F12: ShowBuildIndustryWindow(); break;
|
case WKC_F12: ShowBuildIndustryWindow(); break;
|
||||||
case WKC_SHIFT | WKC_F1: ShowVehicleListWindow(local, INVALID_STATION, VEH_Train); break;
|
case WKC_SHIFT | WKC_F1: ShowVehicleListWindow(_local_player, INVALID_STATION, VEH_Train); break;
|
||||||
case WKC_SHIFT | WKC_F2: ShowVehicleListWindow(local, INVALID_STATION, VEH_Road); break;
|
case WKC_SHIFT | WKC_F2: ShowVehicleListWindow(_local_player, INVALID_STATION, VEH_Road); break;
|
||||||
case WKC_SHIFT | WKC_F3: ShowVehicleListWindow(local, INVALID_STATION, VEH_Ship); break;
|
case WKC_SHIFT | WKC_F3: ShowVehicleListWindow(_local_player, INVALID_STATION, VEH_Ship); break;
|
||||||
case WKC_SHIFT | WKC_F4: ShowVehicleListWindow(local, INVALID_STATION, VEH_Aircraft); 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_F5: ToolbarZoomInClick(w); break;
|
||||||
case WKC_SHIFT | WKC_F6: ToolbarZoomOutClick(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_F8: ShowBuildRoadToolbar(); break;
|
||||||
case WKC_SHIFT | WKC_F9: ShowBuildDocksToolbar(); break;
|
case WKC_SHIFT | WKC_F9: ShowBuildDocksToolbar(); break;
|
||||||
case WKC_SHIFT | WKC_F10:ShowBuildAirToolbar(); break;
|
case WKC_SHIFT | WKC_F10:ShowBuildAirToolbar(); break;
|
||||||
|
|
|
@ -450,6 +450,7 @@ static const WindowDesc _build_trees_scen_desc = {
|
||||||
|
|
||||||
void ShowBuildTreesToolbar(void)
|
void ShowBuildTreesToolbar(void)
|
||||||
{
|
{
|
||||||
|
if (!IsValidPlayer(_current_player)) return;
|
||||||
AllocateWindowDescFront(&_build_trees_desc, 0);
|
AllocateWindowDescFront(&_build_trees_desc, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
18
player_gui.c
18
player_gui.c
|
@ -219,24 +219,24 @@ static const WindowDesc _other_player_finances_small_desc = {
|
||||||
PlayerFinancesWndProc
|
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)
|
static void DoShowPlayerFinances(PlayerID player, bool show_small, bool show_stickied)
|
||||||
{
|
{
|
||||||
Window *w;
|
Window *w;
|
||||||
int mode;
|
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;
|
mode = (player != _local_player) * 2 + show_small;
|
||||||
w = AllocateWindowDescFront(desc_table[mode], player);
|
w = AllocateWindowDescFront(desc_table[mode], player);
|
||||||
if (w != NULL) {
|
if (w != NULL) {
|
||||||
w->caption_color = w->window_number;
|
w->caption_color = w->window_number;
|
||||||
WP(w,def_d).data_1 = mode;
|
WP(w,def_d).data_1 = mode;
|
||||||
if (show_stickied) {
|
if (show_stickied) w->flags4 |= WF_STICKY;
|
||||||
w->flags4 |= WF_STICKY;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -878,6 +878,8 @@ void ShowPlayerCompany(PlayerID player)
|
||||||
{
|
{
|
||||||
Window *w;
|
Window *w;
|
||||||
|
|
||||||
|
if (!IsValidPlayer(player)) return;
|
||||||
|
|
||||||
w = AllocateWindowDescFront(&_player_company_desc, player);
|
w = AllocateWindowDescFront(&_player_company_desc, player);
|
||||||
if (w != NULL) w->caption_color = w->window_number;
|
if (w != NULL) w->caption_color = w->window_number;
|
||||||
}
|
}
|
||||||
|
|
|
@ -589,7 +589,7 @@ void ShowBuildRailToolbar(RailType railtype, int button)
|
||||||
{
|
{
|
||||||
Window *w;
|
Window *w;
|
||||||
|
|
||||||
if (_current_player == PLAYER_SPECTATOR) return;
|
if (!IsValidPlayer(_current_player)) return;
|
||||||
if (!ValParamRailtype(railtype)) return;
|
if (!ValParamRailtype(railtype)) return;
|
||||||
|
|
||||||
// don't recreate the window if we're clicking on a button and the window exists.
|
// don't recreate the window if we're clicking on a button and the window exists.
|
||||||
|
|
|
@ -318,7 +318,8 @@ static const WindowDesc _build_road_desc = {
|
||||||
|
|
||||||
void ShowBuildRoadToolbar(void)
|
void ShowBuildRoadToolbar(void)
|
||||||
{
|
{
|
||||||
if (_current_player == PLAYER_SPECTATOR) return;
|
if (!IsValidPlayer(_current_player)) return;
|
||||||
|
|
||||||
DeleteWindowById(WC_BUILD_TOOLBAR, 0);
|
DeleteWindowById(WC_BUILD_TOOLBAR, 0);
|
||||||
AllocateWindowDesc(&_build_road_desc);
|
AllocateWindowDesc(&_build_road_desc);
|
||||||
if (_patches.link_terraform_toolbar) ShowTerraformToolbar();
|
if (_patches.link_terraform_toolbar) ShowTerraformToolbar();
|
||||||
|
|
|
@ -506,6 +506,8 @@ void ShowPlayerStations(PlayerID player)
|
||||||
{
|
{
|
||||||
Window *w;
|
Window *w;
|
||||||
|
|
||||||
|
if (!IsValidPlayer(player)) return;
|
||||||
|
|
||||||
w = AllocateWindowDescFront(&_player_stations_desc, player);
|
w = AllocateWindowDescFront(&_player_stations_desc, player);
|
||||||
if (w != NULL) {
|
if (w != NULL) {
|
||||||
w->caption_color = (byte)w->window_number;
|
w->caption_color = (byte)w->window_number;
|
||||||
|
|
|
@ -274,6 +274,6 @@ static const WindowDesc _terraform_desc = {
|
||||||
|
|
||||||
void ShowTerraformToolbar(void)
|
void ShowTerraformToolbar(void)
|
||||||
{
|
{
|
||||||
if (_current_player == PLAYER_SPECTATOR) return;
|
if (!IsValidPlayer(_current_player)) return;
|
||||||
AllocateWindowDescFront(&_terraform_desc, 0);
|
AllocateWindowDescFront(&_terraform_desc, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1856,8 +1856,11 @@ static const WindowDesc _player_vehicle_list_aircraft_desc = {
|
||||||
static void ShowVehicleListWindowLocal(PlayerID player, byte vehicle_type, StationID station, OrderID order, uint16 depot_airport_index)
|
static void ShowVehicleListWindowLocal(PlayerID player, byte vehicle_type, StationID station, OrderID order, uint16 depot_airport_index)
|
||||||
{
|
{
|
||||||
Window *w;
|
Window *w;
|
||||||
WindowNumber num = (vehicle_type << 11) | player;
|
WindowNumber num;
|
||||||
|
|
||||||
|
if (!IsValidPlayer(player)) return;
|
||||||
|
|
||||||
|
num = (vehicle_type << 11) | player;
|
||||||
if (order != INVALID_ORDER) {
|
if (order != INVALID_ORDER) {
|
||||||
num |= (order << 16) | VLW_SHARED_ORDERS;
|
num |= (order << 16) | VLW_SHARED_ORDERS;
|
||||||
} else if (depot_airport_index != INVALID_STATION) {
|
} else if (depot_airport_index != INVALID_STATION) {
|
||||||
|
|
Loading…
Reference in New Issue