summaryrefslogtreecommitdiff
path: root/src/train_cmd.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2013-11-26 16:08:58 +0000
committerrubidium <rubidium@openttd.org>2013-11-26 16:08:58 +0000
commitd2ba772f6a9e6339b28faf62c3163d33de1498b3 (patch)
tree19e25a79a8dbe70c7eb21455984c401f72531068 /src/train_cmd.cpp
parent7abe85d72715f91ab309a3aaa18572a8964b189c (diff)
downloadopenttd-d2ba772f6a9e6339b28faf62c3163d33de1498b3.tar.xz
(svn r26130) -Codechange: add some guards against using invalid image indices
Diffstat (limited to 'src/train_cmd.cpp')
-rw-r--r--src/train_cmd.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index 5ccddc79a..4e9ab2a15 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -49,6 +49,11 @@ static void CheckNextTrainTile(Train *v);
static const byte _vehicle_initial_x_fract[4] = {10, 8, 4, 8};
static const byte _vehicle_initial_y_fract[4] = { 8, 4, 8, 10};
+template <>
+bool IsValidImageIndex<VEH_TRAIN>(uint8 image_index)
+{
+ return image_index < lengthof(_engine_sprite_base);
+}
/**
* Determine the side in which the train will leave the tile
@@ -456,6 +461,7 @@ int Train::GetDisplayImageWidth(Point *offset) const
static SpriteID GetDefaultTrainSprite(uint8 spritenum, Direction direction)
{
+ assert(IsValidImageIndex<VEH_TRAIN>(spritenum));
return ((direction + _engine_sprite_add[spritenum]) & _engine_sprite_and[spritenum]) + _engine_sprite_base[spritenum];
}
@@ -479,6 +485,7 @@ SpriteID Train::GetImage(Direction direction, EngineImageType image_type) const
spritenum = this->GetEngine()->original_image_index;
}
+ assert(IsValidImageIndex<VEH_TRAIN>(spritenum));
sprite = GetDefaultTrainSprite(spritenum, direction);
if (this->cargo.StoredCount() >= this->cargo_cap / 2U) sprite += _wagon_full_adder[spritenum];