diff --git a/src/spriteloader/grf.cpp b/src/spriteloader/grf.cpp --- a/src/spriteloader/grf.cpp +++ b/src/spriteloader/grf.cpp @@ -92,7 +92,7 @@ bool DecodeSingleSprite(SpriteLoader::Sp if (num != 0) return WarnCorruptSprite(file, file_pos, __LINE__); - sprite->AllocateData(zoom_lvl, sprite->width * sprite->height); + sprite->AllocateData(zoom_lvl, static_cast(sprite->width) * sprite->height); /* Convert colour depth to pixel size. */ int bpp = 0; @@ -168,13 +168,14 @@ bool DecodeSingleSprite(SpriteLoader::Sp } while (!last_item); } } else { - if (dest_size < sprite->width * sprite->height * bpp) { + int64 sprite_size = static_cast(sprite->width) * sprite->height * bpp; + if (dest_size < sprite_size) { return WarnCorruptSprite(file, file_pos, __LINE__); } - if (dest_size > sprite->width * sprite->height * bpp) { + if (dest_size > sprite_size) { static byte warning_level = 0; - Debug(sprite, warning_level, "Ignoring {} unused extra bytes from the sprite from {} at position {}", dest_size - sprite->width * sprite->height * bpp, file.GetSimplifiedFilename(), file_pos); + Debug(sprite, warning_level, "Ignoring {} unused extra bytes from the sprite from {} at position {}", dest_size - sprite_size, file.GetSimplifiedFilename(), file_pos); warning_level = 6; }