From 175630a60b1a7f8e38dfeb8c49a6cc89382e2296 Mon Sep 17 00:00:00 2001 From: bsxf47 Date: Sun, 5 Mar 2017 22:03:26 +0100 Subject: [PATCH] MiniMap: Check minimap cell boundary values Fixes: Issue #979 --- src/gui/MiniMap.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/gui/MiniMap.cpp b/src/gui/MiniMap.cpp index ae92443e39..a53308316f 100644 --- a/src/gui/MiniMap.cpp +++ b/src/gui/MiniMap.cpp @@ -470,10 +470,24 @@ void MiniMap::revealPlayerPos(int showLevel) { Vec2f playerPos = computePlayerPos(zoom, showLevel); Vec2i playerCell = Vec2i(playerPos.x / cas.x, playerPos.y / cas.y); + + if( playerCell.x < 0 + || playerCell.x >= s32(MINIMAP_MAX_X) + || playerCell.y < 0 + || playerCell.y >= s32(MINIMAP_MAX_Z) + ) { + return; + } + playerPos += start; Vec2i startCell = playerCell - Vec2i(glm::ceil(maxDistance / cas.x)); Vec2i endCell = playerCell + Vec2i(glm::ceil(maxDistance / cas.y)); + + Vec2i maxCell = Vec2i(MINIMAP_MAX_X - 1, MINIMAP_MAX_Z - 1); + + startCell = glm::clamp(startCell, Vec2i_ZERO, maxCell); + endCell = glm::clamp(endCell, Vec2i_ZERO, maxCell); for(int z = startCell.y; z <= endCell.y; z++) { for(int x = startCell.x; x <= endCell.x; x++) {