From ac6cc9d63e012cb540d0c52c62e96fa1c3920094 Mon Sep 17 00:00:00 2001 From: Michael Steenbeek Date: Sat, 2 Jan 2021 15:06:51 +0100 Subject: [PATCH] Fix #13609: Crash in LargeSceneryRemoveAction.cpp (#13663) --- src/openrct2/actions/LargeSceneryRemoveAction.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/openrct2/actions/LargeSceneryRemoveAction.cpp b/src/openrct2/actions/LargeSceneryRemoveAction.cpp index d538176206..96b79650f7 100644 --- a/src/openrct2/actions/LargeSceneryRemoveAction.cpp +++ b/src/openrct2/actions/LargeSceneryRemoveAction.cpp @@ -67,6 +67,9 @@ GameActions::Result::Ptr LargeSceneryRemoveAction::Query() const } rct_scenery_entry* scenery_entry = tileElement->AsLargeScenery()->GetEntry(); + // If we have a bugged scenery entry, do not touch the tile element. + if (scenery_entry == nullptr) + return MakeResult(GameActions::Status::Unknown, STR_CANT_REMOVE_THIS); auto rotatedOffsets = CoordsXYZ{ CoordsXY{ scenery_entry->large_scenery.tiles[_tileIndex].x_offset, scenery_entry->large_scenery.tiles[_tileIndex].y_offset } @@ -136,9 +139,12 @@ GameActions::Result::Ptr LargeSceneryRemoveAction::Execute() const return MakeResult(GameActions::Status::InvalidParameters, STR_INVALID_SELECTION_OF_OBJECTS); } - tileElement->RemoveBannerEntry(); - rct_scenery_entry* scenery_entry = tileElement->AsLargeScenery()->GetEntry(); + // If we have a bugged scenery entry, do not touch the tile element. + if (scenery_entry == nullptr) + return MakeResult(GameActions::Status::Unknown, STR_CANT_REMOVE_THIS); + + tileElement->RemoveBannerEntry(); auto rotatedFirstTile = CoordsXYZ{ CoordsXY{ scenery_entry->large_scenery.tiles[_tileIndex].x_offset, scenery_entry->large_scenery.tiles[_tileIndex].y_offset }