Skip to content

Commit

Permalink
Fix: Ensure 31-bit shifts are unsigned. (#10128)
Browse files Browse the repository at this point in the history
Shifting a signed 32-bit integer by 31 bits is undefined behaviour.
A few more than necessary are switched to unsigned for consistentency.
  • Loading branch information
PeterN committed Nov 4, 2022
1 parent accbfd5 commit f24286a
Show file tree
Hide file tree
Showing 6 changed files with 96 additions and 96 deletions.
8 changes: 4 additions & 4 deletions src/map_type.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ struct TileIndexDiffC {
};

/** Minimal and maximal map width and height */
static const uint MIN_MAP_SIZE_BITS = 6; ///< Minimal size of map is equal to 2 ^ MIN_MAP_SIZE_BITS
static const uint MAX_MAP_SIZE_BITS = 12; ///< Maximal size of map is equal to 2 ^ MAX_MAP_SIZE_BITS
static const uint MIN_MAP_SIZE = 1 << MIN_MAP_SIZE_BITS; ///< Minimal map size = 64
static const uint MAX_MAP_SIZE = 1 << MAX_MAP_SIZE_BITS; ///< Maximal map size = 4096
static const uint MIN_MAP_SIZE_BITS = 6; ///< Minimal size of map is equal to 2 ^ MIN_MAP_SIZE_BITS
static const uint MAX_MAP_SIZE_BITS = 12; ///< Maximal size of map is equal to 2 ^ MAX_MAP_SIZE_BITS
static const uint MIN_MAP_SIZE = 1U << MIN_MAP_SIZE_BITS; ///< Minimal map size = 64
static const uint MAX_MAP_SIZE = 1U << MAX_MAP_SIZE_BITS; ///< Maximal map size = 4096

/**
* Approximation of the length of a straight track, relative to a diagonal
Expand Down
166 changes: 83 additions & 83 deletions src/newgrf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8365,89 +8365,89 @@ static void GRFUnsafe(ByteReader *buf)
/** Initialize the TTDPatch flags */
static void InitializeGRFSpecial()
{
_ttdpatch_flags[0] = ((_settings_game.station.never_expire_airports ? 1 : 0) << 0x0C) // keepsmallairport
| (1 << 0x0D) // newairports
| (1 << 0x0E) // largestations
| ((_settings_game.construction.max_bridge_length > 16 ? 1 : 0) << 0x0F) // longbridges
| (0 << 0x10) // loadtime
| (1 << 0x12) // presignals
| (1 << 0x13) // extpresignals
| ((_settings_game.vehicle.never_expire_vehicles ? 1 : 0) << 0x16) // enginespersist
| (1 << 0x1B) // multihead
| (1 << 0x1D) // lowmemory
| (1 << 0x1E); // generalfixes

_ttdpatch_flags[1] = ((_settings_game.economy.station_noise_level ? 1 : 0) << 0x07) // moreairports - based on units of noise
| (1 << 0x08) // mammothtrains
| (1 << 0x09) // trainrefit
| (0 << 0x0B) // subsidiaries
| ((_settings_game.order.gradual_loading ? 1 : 0) << 0x0C) // gradualloading
| (1 << 0x12) // unifiedmaglevmode - set bit 0 mode. Not revelant to OTTD
| (1 << 0x13) // unifiedmaglevmode - set bit 1 mode
| (1 << 0x14) // bridgespeedlimits
| (1 << 0x16) // eternalgame
| (1 << 0x17) // newtrains
| (1 << 0x18) // newrvs
| (1 << 0x19) // newships
| (1 << 0x1A) // newplanes
| ((_settings_game.construction.train_signal_side == 1 ? 1 : 0) << 0x1B) // signalsontrafficside
| ((_settings_game.vehicle.disable_elrails ? 0 : 1) << 0x1C); // electrifiedrailway

_ttdpatch_flags[2] = (1 << 0x01) // loadallgraphics - obsolote
| (1 << 0x03) // semaphores
| (1 << 0x0A) // newobjects
| (0 << 0x0B) // enhancedgui
| (0 << 0x0C) // newagerating
| ((_settings_game.construction.build_on_slopes ? 1 : 0) << 0x0D) // buildonslopes
| (1 << 0x0E) // fullloadany
| (1 << 0x0F) // planespeed
| (0 << 0x10) // moreindustriesperclimate - obsolete
| (0 << 0x11) // moretoylandfeatures
| (1 << 0x12) // newstations
| (1 << 0x13) // tracktypecostdiff
| (1 << 0x14) // manualconvert
| ((_settings_game.construction.build_on_slopes ? 1 : 0) << 0x15) // buildoncoasts
| (1 << 0x16) // canals
| (1 << 0x17) // newstartyear
| ((_settings_game.vehicle.freight_trains > 1 ? 1 : 0) << 0x18) // freighttrains
| (1 << 0x19) // newhouses
| (1 << 0x1A) // newbridges
| (1 << 0x1B) // newtownnames
| (1 << 0x1C) // moreanimation
| ((_settings_game.vehicle.wagon_speed_limits ? 1 : 0) << 0x1D) // wagonspeedlimits
| (1 << 0x1E) // newshistory
| (0 << 0x1F); // custombridgeheads

_ttdpatch_flags[3] = (0 << 0x00) // newcargodistribution
| (1 << 0x01) // windowsnap
| ((_settings_game.economy.allow_town_roads || _generating_world ? 0 : 1) << 0x02) // townbuildnoroad
| (1 << 0x03) // pathbasedsignalling
| (0 << 0x04) // aichoosechance
| (1 << 0x05) // resolutionwidth
| (1 << 0x06) // resolutionheight
| (1 << 0x07) // newindustries
| ((_settings_game.order.improved_load ? 1 : 0) << 0x08) // fifoloading
| (0 << 0x09) // townroadbranchprob
| (0 << 0x0A) // tempsnowline
| (1 << 0x0B) // newcargo
| (1 << 0x0C) // enhancemultiplayer
| (1 << 0x0D) // onewayroads
| (1 << 0x0E) // irregularstations
| (1 << 0x0F) // statistics
| (1 << 0x10) // newsounds
| (1 << 0x11) // autoreplace
| (1 << 0x12) // autoslope
| (0 << 0x13) // followvehicle
| (1 << 0x14) // trams
| (0 << 0x15) // enhancetunnels
| (1 << 0x16) // shortrvs
| (1 << 0x17) // articulatedrvs
| ((_settings_game.vehicle.dynamic_engines ? 1 : 0) << 0x18) // dynamic engines
| (1 << 0x1E) // variablerunningcosts
| (1 << 0x1F); // any switch is on

_ttdpatch_flags[4] = (1 << 0x00) // larger persistent storage
| ((_settings_game.economy.inflation ? 1 : 0) << 0x01); // inflation is on
_ttdpatch_flags[0] = ((_settings_game.station.never_expire_airports ? 1U : 0U) << 0x0C) // keepsmallairport
| (1U << 0x0D) // newairports
| (1U << 0x0E) // largestations
| ((_settings_game.construction.max_bridge_length > 16 ? 1U : 0U) << 0x0F) // longbridges
| (0U << 0x10) // loadtime
| (1U << 0x12) // presignals
| (1U << 0x13) // extpresignals
| ((_settings_game.vehicle.never_expire_vehicles ? 1U : 0U) << 0x16) // enginespersist
| (1U << 0x1B) // multihead
| (1U << 0x1D) // lowmemory
| (1U << 0x1E); // generalfixes

_ttdpatch_flags[1] = ((_settings_game.economy.station_noise_level ? 1U : 0U) << 0x07) // moreairports - based on units of noise
| (1U << 0x08) // mammothtrains
| (1U << 0x09) // trainrefit
| (0U << 0x0B) // subsidiaries
| ((_settings_game.order.gradual_loading ? 1U : 0U) << 0x0C) // gradualloading
| (1U << 0x12) // unifiedmaglevmode - set bit 0 mode. Not revelant to OTTD
| (1U << 0x13) // unifiedmaglevmode - set bit 1 mode
| (1U << 0x14) // bridgespeedlimits
| (1U << 0x16) // eternalgame
| (1U << 0x17) // newtrains
| (1U << 0x18) // newrvs
| (1U << 0x19) // newships
| (1U << 0x1A) // newplanes
| ((_settings_game.construction.train_signal_side == 1 ? 1U : 0U) << 0x1B) // signalsontrafficside
| ((_settings_game.vehicle.disable_elrails ? 0U : 1U) << 0x1C); // electrifiedrailway

_ttdpatch_flags[2] = (1U << 0x01) // loadallgraphics - obsolote
| (1U << 0x03) // semaphores
| (1U << 0x0A) // newobjects
| (0U << 0x0B) // enhancedgui
| (0U << 0x0C) // newagerating
| ((_settings_game.construction.build_on_slopes ? 1U : 0U) << 0x0D) // buildonslopes
| (1U << 0x0E) // fullloadany
| (1U << 0x0F) // planespeed
| (0U << 0x10) // moreindustriesperclimate - obsolete
| (0U << 0x11) // moretoylandfeatures
| (1U << 0x12) // newstations
| (1U << 0x13) // tracktypecostdiff
| (1U << 0x14) // manualconvert
| ((_settings_game.construction.build_on_slopes ? 1U : 0U) << 0x15) // buildoncoasts
| (1U << 0x16) // canals
| (1U << 0x17) // newstartyear
| ((_settings_game.vehicle.freight_trains > 1 ? 1U : 0U) << 0x18) // freighttrains
| (1U << 0x19) // newhouses
| (1U << 0x1A) // newbridges
| (1U << 0x1B) // newtownnames
| (1U << 0x1C) // moreanimation
| ((_settings_game.vehicle.wagon_speed_limits ? 1U : 0U) << 0x1D) // wagonspeedlimits
| (1U << 0x1E) // newshistory
| (0U << 0x1F); // custombridgeheads

_ttdpatch_flags[3] = (0U << 0x00) // newcargodistribution
| (1U << 0x01) // windowsnap
| ((_settings_game.economy.allow_town_roads || _generating_world ? 0U : 1U) << 0x02) // townbuildnoroad
| (1U << 0x03) // pathbasedsignalling
| (0U << 0x04) // aichoosechance
| (1U << 0x05) // resolutionwidth
| (1U << 0x06) // resolutionheight
| (1U << 0x07) // newindustries
| ((_settings_game.order.improved_load ? 1U : 0U) << 0x08) // fifoloading
| (0U << 0x09) // townroadbranchprob
| (0U << 0x0A) // tempsnowline
| (1U << 0x0B) // newcargo
| (1U << 0x0C) // enhancemultiplayer
| (1U << 0x0D) // onewayroads
| (1U << 0x0E) // irregularstations
| (1U << 0x0F) // statistics
| (1U << 0x10) // newsounds
| (1U << 0x11) // autoreplace
| (1U << 0x12) // autoslope
| (0U << 0x13) // followvehicle
| (1U << 0x14) // trams
| (0U << 0x15) // enhancetunnels
| (1U << 0x16) // shortrvs
| (1U << 0x17) // articulatedrvs
| ((_settings_game.vehicle.dynamic_engines ? 1U : 0U) << 0x18) // dynamic engines
| (1U << 0x1E) // variablerunningcosts
| (1U << 0x1F); // any switch is on

_ttdpatch_flags[4] = (1U << 0x00) // larger persistent storage
| ((_settings_game.economy.inflation ? 1U : 0U) << 0x01); // inflation is on
}

/** Reset and clear all NewGRF stations */
Expand Down
2 changes: 1 addition & 1 deletion src/newgrf_spritegroup.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ struct ResolverObject;
/* SPRITE_WIDTH is 24. ECS has roughly 30 sprite groups per real sprite.
* Adding an 'extra' margin would be assuming 64 sprite groups per real
* sprite. 64 = 2^6, so 2^30 should be enough (for now) */
typedef Pool<SpriteGroup, SpriteGroupID, 1024, 1 << 30, PT_DATA> SpriteGroupPool;
typedef Pool<SpriteGroup, SpriteGroupID, 1024, 1U << 30, PT_DATA> SpriteGroupPool;
extern SpriteGroupPool _spritegroup_pool;

/* Common wrapper for all the different sprite group types */
Expand Down
2 changes: 1 addition & 1 deletion src/slope_type.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ DECLARE_ENUM_AS_BIT_SET(Slope)
* Helper for creating a bitset of slopes.
* @param x The slope to convert into a bitset.
*/
#define M(x) (1 << (x))
#define M(x) (1U << (x))
/** Constant bitset with safe slopes for building a level crossing. */
static const uint32 VALID_LEVEL_CROSSING_SLOPES = M(SLOPE_SEN) | M(SLOPE_ENW) | M(SLOPE_NWS) | M(SLOPE_NS) | M(SLOPE_WSE) | M(SLOPE_EW) | M(SLOPE_FLAT);
#undef M
Expand Down

0 comments on commit f24286a

Please sign in to comment.