mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-24 00:03:11 +01:00
Prevent writing to invalid memory.
Switch magic number to constant `maxTrackElements`. If the number of TrackElements becomes equal to maxTrackElements, cleanup the data and abort the export.
This commit is contained in:
committed by
Michael Steenbeek
parent
b0aaf13cec
commit
60b457d13f
@@ -1006,8 +1006,10 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8 rideIndex, rct_track
|
||||
sint16 start_z = z + trackCoordinates->z_begin;
|
||||
gTrackPreviewOrigin = (LocationXYZ16) { start_x, start_y, start_z };
|
||||
|
||||
const uint16 maxTrackElements = 8192;
|
||||
|
||||
size_t numTrackElements = 0;
|
||||
td6->track_elements = calloc(8192, sizeof(rct_td6_track_element));
|
||||
td6->track_elements = calloc(maxTrackElements, sizeof(rct_td6_track_element));
|
||||
rct_td6_track_element *track = td6->track_elements;
|
||||
do {
|
||||
track->type = track_element_get_type(trackElement.element);
|
||||
@@ -1051,6 +1053,13 @@ static bool track_design_save_to_td6_for_tracked_ride(uint8 rideIndex, rct_track
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if (maxTrackElements == numTrackElements)
|
||||
{
|
||||
free(td6->track_elements);
|
||||
gGameCommandErrorText = STR_TRACK_TOO_LARGE_OR_TOO_MUCH_SCENERY;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
while (trackElement.element != initialMap);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user