changeset 18063:0bd614209dd1 draft

(svn r22878) -Fix (r22873-ish): Check range before casting to uint16.
author frosch <frosch@openttd.org>
date Sat, 03 Sep 2011 10:52:43 +0000
parents 813de0a4a2d7
children 0108a6ec2d68
files src/spriteloader/png.cpp
diffstat 1 files changed, 5 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/spriteloader/png.cpp
+++ b/src/spriteloader/png.cpp
@@ -106,13 +106,15 @@
 			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. */