mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-13 02:52:37 +00:00
(svn r22878) -Fix (r22873-ish): Check range before casting to uint16.
This commit is contained in:
parent
008b5b6d27
commit
b910ae9886
@ -106,13 +106,15 @@ static bool LoadPNG(SpriteLoader::Sprite *sprite, const char *filename, uint32 i
|
||||
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. */
|
||||
|
Loading…
Reference in New Issue
Block a user