diff options
author | m-kiewitz | 2013-09-21 22:35:53 +0200 |
---|---|---|
committer | m-kiewitz | 2013-09-21 22:35:53 +0200 |
commit | fa41ee132b83d99d77349f3e7d647248f2907ff5 (patch) | |
tree | 1794b14c59b50d19f2991adbdd37aa25e6280ec4 | |
parent | c55411a032382bebf5b4428be17136a3f3dea0a2 (diff) | |
download | scummvm-rg350-fa41ee132b83d99d77349f3e7d647248f2907ff5.tar.gz scummvm-rg350-fa41ee132b83d99d77349f3e7d647248f2907ff5.tar.bz2 scummvm-rg350-fa41ee132b83d99d77349f3e7d647248f2907ff5.zip |
SCI: fix for heap corruption during lsl3 ending
-rw-r--r-- | engines/sci/graphics/screen.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/engines/sci/graphics/screen.cpp b/engines/sci/graphics/screen.cpp index 7b92bc89eb..0df163dd7b 100644 --- a/engines/sci/graphics/screen.cpp +++ b/engines/sci/graphics/screen.cpp @@ -286,11 +286,15 @@ void GfxScreen::putPixelOnDisplay(int x, int y, byte color) { * with flood fill, due to small difference in the Bresenham logic. */ void GfxScreen::drawLine(Common::Point startPoint, Common::Point endPoint, byte color, byte priority, byte control) { - int16 left = startPoint.x; - int16 top = startPoint.y; - int16 right = endPoint.x; - int16 bottom = endPoint.y; - + int16 maxWidth = _width - 1; + int16 maxHeight = _height - 1; + // we need to clip values here, lsl3 room 620 background picture draws a line from 0, 199 t 320, 199 + // otherwise we would get heap corruption. + int16 left = CLIP<int16>(startPoint.x, 0, maxWidth); + int16 top = CLIP<int16>(startPoint.y, 0, maxHeight); + int16 right = CLIP<int16>(endPoint.x, 0, maxWidth); + int16 bottom = CLIP<int16>(endPoint.y, 0, maxHeight); + //set_drawing_flag byte drawMask = getDrawingMask(color, priority, control); |