(svn r23986) -Fix (r23889): Invalid reads when scaling an odd-sized sprite smaller.

This commit is contained in:
frosch 2012-02-25 17:18:17 +00:00
parent e3c665a3cb
commit 3d381403a8
1 changed files with 9 additions and 8 deletions

View File

@ -197,18 +197,19 @@ static void ResizeSpriteOut(SpriteLoader::Sprite *sprite, ZoomLevel zoom)
const SpriteLoader::CommonPixel *src_end = src + sprite[zoom - 1].height * sprite[zoom - 1].width; const SpriteLoader::CommonPixel *src_end = src + sprite[zoom - 1].height * sprite[zoom - 1].width;
for (uint y = 0; y < sprite[zoom].height; y++) { for (uint y = 0; y < sprite[zoom].height; y++) {
if (src >= src_end) src = src_end - sprite[zoom - 1].width; const SpriteLoader::CommonPixel *src_ln = src + sprite[zoom - 1].width;
assert(src_ln <= src_end);
const SpriteLoader::CommonPixel *src_ln = src + sprite[zoom - 1].width * 2;
for (uint x = 0; x < sprite[zoom].width; x++) { for (uint x = 0; x < sprite[zoom].width; x++) {
if (src >= src_ln) src = src_ln - 1; assert(src < src_ln);
if ((src + 1)->a != 0) { *dst = *(src + 1); } if (src + 1 != src_ln && (src + 1)->a != 0) {
else { *dst = *src; } *dst = *(src + 1);
} else {
*dst = *src;
}
dst++; dst++;
src += 2; src += 2;
} }
src = src_ln + sprite[zoom - 1].width;
src = src_ln;
} }
} }