From 83ac5aa27ad5185d68e549d9be2134506009b1ae Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Fri, 2 Apr 2021 09:13:53 +0100 Subject: [PATCH] Fix: Memory leak of airport tile layout in AirportChangeInfo (prop 0A) (#8928) --- src/newgrf.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 7ac8bc945c..46bd5a6558 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3862,6 +3862,7 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B } case 0x0A: { // Set airport layout + byte old_num_table = as->num_table; free(as->rotation); as->num_table = buf->ReadByte(); // Number of layaouts as->rotation = MallocT(as->num_table); @@ -3920,6 +3921,12 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B tile_table[j] = CallocT(size); memcpy(tile_table[j], copy_from, sizeof(*copy_from) * size); } + /* Free old layouts in the airport spec */ + for (int j = 0; j < old_num_table; j++) { + /* remove the individual layouts */ + free(as->table[j]); + } + free(as->table); /* Install final layout construction in the airport spec */ as->table = tile_table; free(att);