summaryrefslogtreecommitdiff
path: root/src/spritecache.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2008-11-23 13:42:05 +0000
committerrubidium <rubidium@openttd.org>2008-11-23 13:42:05 +0000
commit2fec4d8e3ccde7278be8e45997061cbd98c9cecb (patch)
treed015540e51590b8c79083cc3dfec59135bb47baf /src/spritecache.cpp
parent150fd2a49fb9c557b224b639e0c248410f557d07 (diff)
downloadopenttd-2fec4d8e3ccde7278be8e45997061cbd98c9cecb.tar.xz
(svn r14610) -Fix [FS#2415]: possible stack corruption when reading corrupted sprites.
-Change: harden the sprite reading routine against corrupt sprites.
Diffstat (limited to 'src/spritecache.cpp')
-rw-r--r--src/spritecache.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/spritecache.cpp b/src/spritecache.cpp
index 4de7e076b..a354c65ff 100644
--- a/src/spritecache.cpp
+++ b/src/spritecache.cpp
@@ -271,7 +271,10 @@ static void* ReadSprite(SpriteCache *sc, SpriteID id, SpriteType sprite_type)
sc->type = sprite_type;
- if (!sprite_loader.LoadSprite(&sprite, file_slot, file_pos, sprite_type)) return NULL;
+ if (!sprite_loader.LoadSprite(&sprite, file_slot, file_pos, sprite_type)) {
+ if (id == SPR_IMG_QUERY) usererror("Okay... something went horribly wrong. I couldn't load the fallback sprite. What should I do?");
+ return (void*)GetRawSprite(SPR_IMG_QUERY, ST_NORMAL);
+ }
sc->ptr = BlitterFactoryBase::GetCurrentBlitter()->Encode(&sprite, &AllocSprite);
free(sprite.data);