~ubuntu-branches/debian/squeeze/openttd/squeeze

« back to all changes in this revision

Viewing changes to src/rail_cmd.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Matthijs Kooijman
  • Date: 2008-08-08 11:07:05 UTC
  • mfrom: (1.1.4 upstream) (2.1.1 lenny)
  • Revision ID: james.westby@ubuntu.com-20080808110705-zq0eo95c4pexg70i
* New upstream release.
  - Fixes remote crash vulnerability CVE-2008-3547. Closes: #493714

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* $Id: rail_cmd.cpp 12864 2008-04-24 11:48:09Z rubidium $ */
 
1
/* $Id: rail_cmd.cpp 13687 2008-07-09 19:15:43Z rubidium $ */
2
2
 
3
3
/** @file rail_cmd.cpp */
4
4
 
1107
1107
 
1108
1108
        if (!ValParamTrackOrientation(track) ||
1109
1109
                        !IsTileType(tile, MP_RAILWAY) ||
 
1110
                        !HasTrack(tile, track) ||
1110
1111
                        !EnsureNoTrainOnTrack(tile, track) ||
1111
1112
                        !HasSignalOnTrack(tile, track)) {
1112
1113
                return CMD_ERROR;
1376
1377
                                cost.AddCost(ret);
1377
1378
                        }
1378
1379
 
1379
 
                        if (water_ground) {
 
1380
                        /* when bankrupting, don't make water dirty, there could be a ship on lower halftile */
 
1381
                        if (water_ground && !(flags & DC_BANKRUPT)) {
 
1382
                                if (!EnsureNoVehicleOnGround(tile)) return CMD_ERROR;
 
1383
 
1380
1384
                                /* The track was removed, and left a coast tile. Now also clear the water. */
1381
1385
                                if (flags & DC_EXEC) DoClearSquare(tile);
1382
1386
                                cost.AddCost(_price.clear_water);
2098
2102
 
2099
2103
static TrackStatus GetTileTrackStatus_Track(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
2100
2104
{
 
2105
        /* Case of half tile slope with water. */
 
2106
        if (mode == TRANSPORT_WATER && IsPlainRailTile(tile) && GetRailGroundType(tile) == RAIL_GROUND_WATER) {
 
2107
                TrackBits tb = GetTrackBits(tile);
 
2108
                switch (tb) {
 
2109
                        default: NOT_REACHED();
 
2110
                        case TRACK_BIT_UPPER: tb = TRACK_BIT_LOWER; break;
 
2111
                        case TRACK_BIT_LOWER: tb = TRACK_BIT_UPPER; break;
 
2112
                        case TRACK_BIT_LEFT:  tb = TRACK_BIT_RIGHT; break;
 
2113
                        case TRACK_BIT_RIGHT: tb = TRACK_BIT_LEFT;  break;
 
2114
                }
 
2115
                return CombineTrackStatus(TrackBitsToTrackdirBits(tb), TRACKDIR_BIT_NONE);
 
2116
        }
 
2117
 
2101
2118
        if (mode != TRANSPORT_RAIL) return 0;
2102
2119
 
2103
2120
        TrackBits trackbits = TRACK_BIT_NONE;