From 8e4cf4d599a701177a4aaf6bddf791260a3ebf70 Mon Sep 17 00:00:00 2001 From: Darkvater Date: Tue, 2 May 2006 14:00:26 +0000 Subject: [PATCH] (svn r4683) - Backport from trunk (r4586): Codechange: Recursive commands that rely on _error_message to handle success/failure can fail if a recursive call fails but doesn't set the error message, thus resulting in an old, possibly erroneous being used --- clear_cmd.c | 1 - rail_cmd.c | 5 +++-- road_cmd.c | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/clear_cmd.c b/clear_cmd.c index a698d3c534..c3b0cb47ca 100644 --- a/clear_cmd.c +++ b/clear_cmd.c @@ -195,7 +195,6 @@ int32 CmdTerraformLand(int x, int y, uint32 flags, uint32 p1, uint32 p2) SET_EXPENSES_TYPE(EXPENSES_CONSTRUCTION); - _error_message = INVALID_STRING_ID; _terraform_err_tile = 0; ts.direction = direction = p2 ? 1 : -1; diff --git a/rail_cmd.c b/rail_cmd.c index 94589cc384..f56eaaa194 100644 --- a/rail_cmd.c +++ b/rail_cmd.c @@ -602,8 +602,8 @@ static int32 CmdRailTrackHelper(int x, int y, uint32 flags, uint32 p1, uint32 p2 ret = DoCommand(x, y, railtype, TrackdirToTrack(trackdir), flags, (mode == 0) ? CMD_BUILD_SINGLE_RAIL : CMD_REMOVE_SINGLE_RAIL); if (CmdFailed(ret)) { - if ((_error_message != STR_1007_ALREADY_BUILT) && (mode == 0)) - break; + if ((_error_message != STR_1007_ALREADY_BUILT) && (mode == 0)) break; + _error_message = INVALID_STRING_ID; } else total_cost += ret; @@ -895,6 +895,7 @@ static int32 CmdSignalTrackHelper(int x, int y, uint32 flags, uint32 p1, uint32 * This includes vehicles on track, competitor's tracks, etc. */ if (CmdFailed(ret)) { if (_error_message != STR_1005_NO_SUITABLE_RAILROAD_TRACK && mode != 1) return CMD_ERROR; + _error_message = INVALID_STRING_ID; } else { error = false; total_cost += ret; diff --git a/road_cmd.c b/road_cmd.c index 2258553b4c..95a6130f74 100644 --- a/road_cmd.c +++ b/road_cmd.c @@ -546,6 +546,7 @@ int32 CmdBuildLongRoad(int x, int y, uint32 flags, uint32 p1, uint32 p2) ret = DoCommandByTile(tile, bits, 0, flags, CMD_BUILD_ROAD); if (CmdFailed(ret)) { if (_error_message != STR_1007_ALREADY_BUILT) return CMD_ERROR; + _error_message = INVALID_STRING_ID; } else { cost += ret; }