From 100aca1848023d4564d933c73347ccfaa48b0e36 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 9 Jul 2022 12:27:58 +0200 Subject: [PATCH] Fix: CmdRemoveRoadStop didn't validate the height property properly (#9945) Height was a unsigned 32bit integer, where TileAddWrap uses a signed 32bit integer for the height. In result, there was an implicit cast from unsigned to signed, messing things up. But looking at it from a functional perspective, allowing such large values is not sensible. In fact, width is restricted to just a 8bit integer. By changing height to a 8bit integer too, the implicit cast will never make a positive value negative anymore. --- src/station_cmd.cpp | 2 +- src/station_cmd.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 85c18b6faa..f0bde9f45f 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2058,7 +2058,7 @@ static CommandCost RemoveRoadStop(TileIndex tile, DoCommandFlag flags) * @param remove_road Remove roads of drive-through stops? * @return The cost of this operation or an error. */ -CommandCost CmdRemoveRoadStop(DoCommandFlag flags, TileIndex tile, uint8 width, uint height, RoadStopType stop_type, bool remove_road) +CommandCost CmdRemoveRoadStop(DoCommandFlag flags, TileIndex tile, uint8 width, uint8 height, RoadStopType stop_type, bool remove_road) { if (stop_type >= ROADSTOP_END) return CMD_ERROR; /* Check for incorrect width / height. */ diff --git a/src/station_cmd.h b/src/station_cmd.h index 6e85ffbfa2..7dc23c68dc 100644 --- a/src/station_cmd.h +++ b/src/station_cmd.h @@ -20,7 +20,7 @@ CommandCost CmdBuildDock(DoCommandFlag flags, TileIndex tile, StationID station_ CommandCost CmdBuildRailStation(DoCommandFlag flags, TileIndex tile_org, RailType rt, Axis axis, byte numtracks, byte plat_len, StationClassID spec_class, byte spec_index, StationID station_to_join, bool adjacent); CommandCost CmdRemoveFromRailStation(DoCommandFlag flags, TileIndex start, TileIndex end, bool keep_rail); CommandCost CmdBuildRoadStop(DoCommandFlag flags, TileIndex tile, uint8 width, uint8 length, RoadStopType stop_type, bool is_drive_through, DiagDirection ddir, RoadType rt, StationID station_to_join, bool adjacent); -CommandCost CmdRemoveRoadStop(DoCommandFlag flags, TileIndex tile, uint8 width, uint height, RoadStopType stop_type, bool remove_road); +CommandCost CmdRemoveRoadStop(DoCommandFlag flags, TileIndex tile, uint8 width, uint8 height, RoadStopType stop_type, bool remove_road); CommandCost CmdRenameStation(DoCommandFlag flags, StationID station_id, const std::string &text); CommandCost CmdOpenCloseAirport(DoCommandFlag flags, StationID station_id);