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
commit2277a1ff9ccd2e5a5acca1e815f628f054c84491 (patch)
treed015540e51590b8c79083cc3dfec59135bb47baf /src/spritecache.cpp
parentca5ed4b2cc6e18e73b1ac2e5a7d964531a58e81d (diff)
downloadopenttd-2277a1ff9ccd2e5a5acca1e815f628f054c84491.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);