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 | 2277a1ff9ccd2e5a5acca1e815f628f054c84491 (patch) | |
tree | d015540e51590b8c79083cc3dfec59135bb47baf /src/spritecache.cpp | |
parent | ca5ed4b2cc6e18e73b1ac2e5a7d964531a58e81d (diff) | |
download | openttd-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.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); |