Changeset - r18053:eaf9412b3ef9
[Not reviewed]
master
0 1 0
frosch - 13 years ago 2011-09-03 10:52:43
frosch@openttd.org
(svn r22878) -Fix (r22873-ish): Check range before casting to uint16.
1 file changed with 5 insertions and 3 deletions:
0 comments (0 inline, 0 general)
src/spriteloader/png.cpp
Show inline comments
 
@@ -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. */
0 comments (0 inline, 0 general)