Changeset - r19115:e871966d9999
[Not reviewed]
master
0 1 0
frosch - 13 years ago 2012-02-25 17:18:17
frosch@openttd.org
(svn r23986) -Fix (r23889): Invalid reads when scaling an odd-sized sprite smaller.
1 file changed with 9 insertions and 8 deletions:
0 comments (0 inline, 0 general)
src/spritecache.cpp
Show inline comments
 
@@ -197,18 +197,19 @@ static void ResizeSpriteOut(SpriteLoader
 
	const SpriteLoader::CommonPixel *src_end = src + sprite[zoom - 1].height * sprite[zoom - 1].width;
 

	
 
	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 * 2;
 
		const SpriteLoader::CommonPixel *src_ln = src + sprite[zoom - 1].width;
 
		assert(src_ln <= src_end);
 
		for (uint x = 0; x < sprite[zoom].width; x++) {
 
			if (src >= src_ln) src = src_ln - 1;
 
			if ((src + 1)->a != 0) { *dst = *(src + 1); }
 
			else { *dst = *src; }
 
			assert(src < src_ln);
 
			if (src + 1 != src_ln && (src + 1)->a != 0) {
 
				*dst = *(src + 1);
 
			} else {
 
				*dst = *src;
 
			}
 
			dst++;
 
			src += 2;
 
		}
 

	
 
		src = src_ln;
 
		src = src_ln + sprite[zoom - 1].width;
 
	}
 
}
 

	
0 comments (0 inline, 0 general)