Mercurial > hg > openttd
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. */