From 324e17d8274498eb77fa927f4afd3a5bc3af7d95 Mon Sep 17 00:00:00 2001 From: frosch Date: Tue, 17 Jun 2014 19:08:07 +0000 Subject: [PATCH] (svn r26652) [1.4] -Backport from trunk: - Fix: Segmentation fault when encountering a .obg/.obs/.obm with empty string/zero length MD5 checksums [FS#6038] (r26637) - Fix: The 'Load' button was not properly enabled/disabled for old savegames without NewGRF information (r26634) - Fix: If the video driver fails to supply a list of resolutions, display an error message [FS#6012] (r26629) --- src/base_media_func.h | 2 +- src/fios_gui.cpp | 6 +++--- src/lang/english.txt | 1 + src/settings_gui.cpp | 4 ++++ src/widgets/dropdown.cpp | 2 ++ 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/base_media_func.h b/src/base_media_func.h index 6322ba1dba..60ace545da 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -100,7 +100,7 @@ bool BaseSet::FillSetDetails(IniFile *ini, const /* Then find the MD5 checksum */ item = md5s->GetItem(filename, false); - if (item == NULL) { + if (item == NULL || item->value == NULL) { DEBUG(grf, 0, "No MD5 checksum specified for: %s (in %s)", filename, full_filename); return false; } diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 9fce85ae96..a7b8c40395 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -533,7 +533,7 @@ public: if (_saveload_mode == SLD_LOAD_HEIGHTMAP) { delete this; ShowHeightmapLoad(); - } else if (_load_check_data.grf_compatibility != GLC_NOT_FOUND || _settings_client.gui.UserIsAllowedToChangeNewGRFs()) { + } else if (!_load_check_data.HasNewGrfs() || _load_check_data.grf_compatibility != GLC_NOT_FOUND || _settings_client.gui.UserIsAllowedToChangeNewGRFs()) { _switch_mode = (_game_mode == GM_EDITOR) ? SM_LOAD_SCENARIO : SM_LOAD_GAME; ClearErrorMessages(); delete this; @@ -550,7 +550,7 @@ public: case WID_SL_MISSING_NEWGRFS: if (!_network_available) { ShowErrorMessage(STR_NETWORK_ERROR_NOTAVAILABLE, INVALID_STRING_ID, WL_ERROR); - } else { + } else if (_load_check_data.HasNewGrfs()) { #if defined(ENABLE_NETWORK) ShowMissingContentWindow(_load_check_data.grfconfig); #endif @@ -691,7 +691,7 @@ public: } if (_saveload_mode == SLD_LOAD_GAME || _saveload_mode == SLD_LOAD_SCENARIO) { this->SetWidgetDisabledState(WID_SL_LOAD_BUTTON, - this->selected == NULL || _load_check_data.HasErrors() || !(_load_check_data.grf_compatibility != GLC_NOT_FOUND || _settings_client.gui.UserIsAllowedToChangeNewGRFs())); + this->selected == NULL || _load_check_data.HasErrors() || !(!_load_check_data.HasNewGrfs() || _load_check_data.grf_compatibility != GLC_NOT_FOUND || _settings_client.gui.UserIsAllowedToChangeNewGRFs())); this->SetWidgetDisabledState(WID_SL_NEWGRF_INFO, !_load_check_data.HasNewGrfs()); this->SetWidgetDisabledState(WID_SL_MISSING_NEWGRFS, diff --git a/src/lang/english.txt b/src/lang/english.txt index 6ea0b36263..ded3aa5776 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -969,6 +969,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Select t STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} corrupted file{P "" s} STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Additional information about the base music set +STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Failed to retrieve a list of supported resolutions STR_ERROR_FULLSCREEN_FAILED :{WHITE}Fullscreen mode failed # Custom currency window diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 908ddadbf6..a280407248 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -265,6 +265,8 @@ struct GameOptionsWindow : Window { } case WID_GO_RESOLUTION_DROPDOWN: // Setup resolution dropdown + if (_num_resolutions == 0) break; + list = new DropDownList(); *selected_index = GetCurRes(); for (int i = 0; i < _num_resolutions; i++) { @@ -440,6 +442,8 @@ struct GameOptionsWindow : Window { DropDownList *list = this->BuildDropDownList(widget, &selected); if (list != NULL) { ShowDropDownList(this, list, selected, widget); + } else { + if (widget == WID_GO_RESOLUTION_DROPDOWN) ShowErrorMessage(STR_ERROR_RESOLUTION_LIST_FAILED, INVALID_STRING_ID, WL_ERROR); } break; } diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index 6b0f60e37d..20fab15d59 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -114,6 +114,8 @@ struct DropdownWindow : Window { DropdownWindow(Window *parent, const DropDownList *list, int selected, int button, bool instant_close, const Point &position, const Dimension &size, Colours wi_colour, bool scroll) : Window(&_dropdown_desc) { + assert(list->Length() > 0); + this->position = position; this->CreateNestedTree();