From 85c1ec8fa5a08d6cb86a76e457e35fb0969ee3b9 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 11 Mar 2019 16:31:02 +0000 Subject: [PATCH] Fix #8841: Catch exceptions when loading parks from title editor (#8843) --- src/openrct2-ui/windows/TitleEditor.cpp | 30 +++++++++++++++---------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/openrct2-ui/windows/TitleEditor.cpp b/src/openrct2-ui/windows/TitleEditor.cpp index a68b392329..022d605fae 100644 --- a/src/openrct2-ui/windows/TitleEditor.cpp +++ b/src/openrct2-ui/windows/TitleEditor.cpp @@ -363,21 +363,27 @@ static void window_title_editor_mouseup(rct_window* w, rct_widgetindex widgetInd auto handle = TitleSequenceGetParkHandle(_editingTitleSequence, w->selected_list_item); auto stream = (IStream*)handle->Stream; auto hintPath = String::ToStd(handle->HintPath); - bool isScenario = ParkImporter::ExtensionIsScenario(hintPath); - auto& objectMgr = OpenRCT2::GetContext()->GetObjectManager(); - auto parkImporter = std::unique_ptr(ParkImporter::Create(hintPath)); - auto result = parkImporter->LoadFromStream(stream, isScenario); - objectMgr.LoadObjects(result.RequiredObjects.data(), result.RequiredObjects.size()); - parkImporter->Import(); + try + { + auto& objectMgr = OpenRCT2::GetContext()->GetObjectManager(); + auto parkImporter = std::unique_ptr(ParkImporter::Create(hintPath)); + auto result = parkImporter->LoadFromStream(stream, isScenario); + objectMgr.LoadObjects(result.RequiredObjects.data(), result.RequiredObjects.size()); + parkImporter->Import(); - if (isScenario) - scenario_begin(); - else - game_load_init(); + if (isScenario) + scenario_begin(); + else + game_load_init(); - TitleSequenceCloseParkHandle(handle); - window_title_editor_open(WINDOW_TITLE_EDITOR_TAB_SAVES); + TitleSequenceCloseParkHandle(handle); + window_title_editor_open(WINDOW_TITLE_EDITOR_TAB_SAVES); + } + catch (const std::exception&) + { + context_show_error(ERROR_TYPE_FILE_LOAD, STR_FILE_CONTAINS_INVALID_DATA); + } } break;