diff options
author | rubidium <rubidium@openttd.org> | 2008-11-23 13:42:05 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2008-11-23 13:42:05 +0000 |
commit | 2fec4d8e3ccde7278be8e45997061cbd98c9cecb (patch) | |
tree | d015540e51590b8c79083cc3dfec59135bb47baf /src/spritecache.cpp | |
parent | 150fd2a49fb9c557b224b639e0c248410f557d07 (diff) | |
download | openttd-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.cpp | 5 |
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); |