mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-09 07:29:44 +00:00
(svn r23986) -Fix (r23889): Invalid reads when scaling an odd-sized sprite smaller.
This commit is contained in:
parent
e3c665a3cb
commit
3d381403a8
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user