diff --git a/src/spriteloader/png.cpp b/src/spriteloader/png.cpp --- a/src/spriteloader/png.cpp +++ b/src/spriteloader/png.cpp @@ -106,13 +106,15 @@ static bool LoadPNG(SpriteLoader::Sprite if (strcmp("y_offs", text_ptr[i].key) == 0) sprite->y_offs = strtol(text_ptr[i].text, NULL, 0); } - sprite->height = png_get_image_height(png_ptr, info_ptr); - sprite->width = png_get_image_width(png_ptr, info_ptr); + uint height = png_get_image_height(png_ptr, info_ptr); + uint width = png_get_image_width(png_ptr, info_ptr); /* Check if sprite dimensions aren't larger than what is allowed in GRF-files. */ - if (sprite->height > UINT8_MAX || sprite->width > UINT16_MAX) { + if (height > UINT8_MAX || width > UINT16_MAX) { png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); return false; } + sprite->height = height; + sprite->width = width; sprite->AllocateData(sprite->width * sprite->height); } else if (sprite->height != png_get_image_height(png_ptr, info_ptr) || sprite->width != png_get_image_width(png_ptr, info_ptr)) { /* Make sure the mask image isn't larger than the sprite image. */