summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--newgrf.c10
-rw-r--r--newgrf_engine.c5
2 files changed, 15 insertions, 0 deletions
diff --git a/newgrf.c b/newgrf.c
index 7a294c655..440cfbf31 100644
--- a/newgrf.c
+++ b/newgrf.c
@@ -1843,6 +1843,11 @@ static void FeatureMapSpriteGroup(byte *buf, int len)
if (ctype == 0xFE) ctype = GC_DEFAULT_NA;
if (ctype == 0xFF) ctype = GC_PURCHASE;
+ if (ctype >= NUM_GLOBAL_CID) {
+ grfmsg(GMS_WARN, "FeatureMapSpriteGroup: Cargo type %d out of range, skipping.", ctype);
+ continue;
+ }
+
statspec->spritegroup[ctype] = _cur_grffile->spritegroups[groupid];
}
}
@@ -1919,6 +1924,11 @@ static void FeatureMapSpriteGroup(byte *buf, int len)
if (ctype == GC_INVALID) ctype = GC_PURCHASE;
+ if (ctype >= NUM_GLOBAL_CID) {
+ grfmsg(GMS_WARN, "FeatureMapSpriteGroup: Cargo type %d out of range, skipping.", ctype);
+ continue;
+ }
+
if (wagover) {
SetWagonOverrideSprites(engine, ctype, _cur_grffile->spritegroups[groupid], last_engines, last_engines_count);
} else {
diff --git a/newgrf_engine.c b/newgrf_engine.c
index cb126c432..328ed3290 100644
--- a/newgrf_engine.c
+++ b/newgrf_engine.c
@@ -77,6 +77,9 @@ void SetWagonOverrideSprites(EngineID engine, CargoID cargo, const SpriteGroup *
WagonOverrides *wos;
WagonOverride *wo;
+ assert(engine < TOTAL_NUM_ENGINES);
+ assert(cargo < NUM_GLOBAL_CID);
+
wos = &_engine_wagon_overrides[engine];
wos->overrides_count++;
wos->overrides = realloc(wos->overrides,
@@ -147,6 +150,8 @@ static const GRFFile *_engine_grf[TOTAL_NUM_ENGINES];
void SetCustomEngineSprites(EngineID engine, byte cargo, const SpriteGroup *group)
{
assert(engine < TOTAL_NUM_ENGINES);
+ assert(cargo < NUM_GLOBAL_CID);
+
if (engine_custom_sprites[engine][cargo] != NULL) {
DEBUG(grf, 6)("SetCustomEngineSprites: engine `%d' cargo `%d' already has group -- replacing.", engine, cargo);
}