From 57b429574ef92c62d202955535896b36845b88db Mon Sep 17 00:00:00 2001
From: paramat <mat.gregory@virginmedia.com>
Date: Mon, 30 Nov 2015 01:43:28 +0000
Subject: [PATCH] Dungeongen: Fix rarely triggered segfault

A segfault exposed a missing 'vm->m_area.contains()'
check in makeCorridor that allowed the calculation
of vm index for a node outside the vm area. The huge
and invalid index number caused getContent to fail
---
 src/dungeongen.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/dungeongen.cpp b/src/dungeongen.cpp
index bfaad9faa..cb5ea97b6 100644
--- a/src/dungeongen.cpp
+++ b/src/dungeongen.cpp
@@ -392,7 +392,8 @@ void DungeonGen::makeCorridor(v3s16 doorplace, v3s16 doordir,
 		if (partcount != 0)
 			p.Y += make_stairs;
 
-		if (vm->m_area.contains(p) && vm->m_area.contains(p + v3s16(0, 1, 0))) {
+		if (vm->m_area.contains(p) && vm->m_area.contains(p + v3s16(0, 1, 0)) &&
+				vm->m_area.contains(v3s16(p.X - dir.X, p.Y - 1, p.Z - dir.Z))) {
 			if (make_stairs) {
 				makeFill(p + v3s16(-1, -1, -1),
 					dp.holesize + v3s16(2, 3, 2),
-- 
GitLab