From 86a94380708dba8d8e6eed6527175ba144a2cc59 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 12 Oct 2017 01:50:28 +0100 Subject: [PATCH] Fix AirportSpec->rotation not being duplicated/freed correctly Fixes crashes when resetting GRF data --- src/newgrf.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 9bde271227..76cbc6dafe 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3680,6 +3680,9 @@ static void DuplicateTileTable(AirportSpec *as) MemCpyT(depot_table, as->depot_table, as->nof_depots); } as->depot_table = depot_table; + Direction *rotation = MallocT(as->num_table); + MemCpyT(rotation, as->rotation, as->num_table); + as->rotation = rotation; } /** @@ -3750,6 +3753,7 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B case 0x0A: { // Set airport layout as->num_table = buf->ReadByte(); // Number of layaouts + free(as->rotation); as->rotation = MallocT(as->num_table); uint32 defsize = buf->ReadDWord(); // Total size of the definition AirportTileTable **tile_table = CallocT(as->num_table); // Table with tiles to compose the airport