From 3429a14c119752daa8d17c499dbffb27a3fe23a5 Mon Sep 17 00:00:00 2001 From: sylvaintv Date: Wed, 1 Jun 2011 23:49:19 +0200 Subject: TOON: Fix crash #3308220 Bug #3308220: "Crashes" Added clipping to magnifier effect --- engines/toon/toon.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp index 44c747c4c4..e5c2cc0952 100644 --- a/engines/toon/toon.cpp +++ b/engines/toon/toon.cpp @@ -466,20 +466,24 @@ void ToonEngine::doMagnifierEffect() { byte tempBuffer[25 * 25]; for (int32 y = -12; y <= 12; y++) { + int32 cy = CLIP(posY + y, 0, TOON_BACKBUFFER_HEIGHT-1); for (int32 x = -12; x <= 12; x++) { + int32 cx = CLIP(posX + x, 0, TOON_BACKBUFFER_WIDTH-1); int32 destPitch = surface.pitch; - uint8 *curRow = (uint8 *)surface.pixels + (posY + y) * destPitch + (posX + x); + uint8 *curRow = (uint8 *)surface.pixels + cy * destPitch + cx; tempBuffer[(y + 12) * 25 + x + 12] = *curRow; } } for (int32 y = -12; y <= 12; y++) { + int32 cy = CLIP(posY + y, 0, TOON_BACKBUFFER_HEIGHT-1); for (int32 x = -12; x <= 12; x++) { int32 dist = y * y + x * x; if (dist > 144) continue; + int32 cx = CLIP(posX + x, 0, TOON_BACKBUFFER_WIDTH-1); int32 destPitch = surface.pitch; - uint8 *curRow = (uint8 *)surface.pixels + (posY + y) * destPitch + (posX + x); + uint8 *curRow = (uint8 *)surface.pixels + cy * destPitch + cx; int32 lerp = (512 + intSqrt[dist] * 256 / 12); *curRow = tempBuffer[(y * lerp / 1024 + 12) * 25 + x * lerp / 1024 + 12]; } -- cgit v1.2.3