aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/slice_renderer.cpp
diff options
context:
space:
mode:
authorThanasis Antoniou2019-07-28 14:05:26 +0300
committerThanasis Antoniou2019-07-28 14:06:26 +0300
commit4b482b2d3e32e834eefb4d6af1a175f2b2ac75da (patch)
treeae4983425d7ae2c19796c6966070ce92248b9bfb /engines/bladerunner/slice_renderer.cpp
parent6884441f519fa95da54f9ea977c900321ab48701 (diff)
downloadscummvm-rg350-4b482b2d3e32e834eefb4d6af1a175f2b2ac75da.tar.gz
scummvm-rg350-4b482b2d3e32e834eefb4d6af1a175f2b2ac75da.tar.bz2
scummvm-rg350-4b482b2d3e32e834eefb4d6af1a175f2b2ac75da.zip
BLADERUNNER: prevent seg fault in ESPER
Also added CLIP to all getBasePtr() calls where it would seem appropriate/safer to do so
Diffstat (limited to 'engines/bladerunner/slice_renderer.cpp')
-rw-r--r--engines/bladerunner/slice_renderer.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/engines/bladerunner/slice_renderer.cpp b/engines/bladerunner/slice_renderer.cpp
index 4c340537d2..f797d13b1a 100644
--- a/engines/bladerunner/slice_renderer.cpp
+++ b/engines/bladerunner/slice_renderer.cpp
@@ -468,6 +468,7 @@ void SliceRenderer::drawInWorld(int animationId, int animationFrame, Vector3 pos
_setEffectColor.b = setEffectColor.b * 31.0f * 65536.0f;
if (frameY >= 0 && frameY < surface.h) {
+ // No need to CLIP frameY here in getBasePtr(), since it is within [0, surface.h - 1]
drawSlice((int)sliceLine, true, (uint16 *)surface.getBasePtr(0, frameY), zBufferLinePtr, frameY);
}
@@ -530,6 +531,7 @@ void SliceRenderer::drawOnScreen(int animationId, int animationFrame, int screen
while (currentSlice < _frameSliceCount) {
if (currentY >= 0 && currentY < surface.h) {
memset(lineZbuffer, 0xFF, 640 * 2);
+ // No need to CLIP currentY here in getBasePtr(), since it is within [0, surface.h - 1]
drawSlice(currentSlice, false, (uint16 *)surface.getBasePtr(0, currentY), lineZbuffer, currentY);
currentSlice += sliceStep;
currentY--;
@@ -721,7 +723,7 @@ void SliceRenderer::drawShadowPolygon(int transparency, Graphics::Surface &surfa
for (int x = MIN(xMin, xMax); x < MAX(xMin, xMax); ++x) {
uint16 z = zbuffer[x + y * 640];
- uint16 *pixel = (uint16*)surface.getBasePtr(x, y);
+ uint16 *pixel = (uint16*)surface.getBasePtr(CLIP(x, 0, surface.w - 1), CLIP(y, 0, surface.h - 1));
if (z >= zMin) {
int index = (x & 3) + ((y & 3) << 2);