Dungeongen: Fix rarely triggered segfault
authorparamat <mat.gregory@virginmedia.com>
Mon, 30 Nov 2015 01:43:28 +0000 (01:43 +0000)
committerparamat <mat.gregory@virginmedia.com>
Tue, 1 Dec 2015 00:36:38 +0000 (00:36 +0000)
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

index bfaad9faa3a72f46b9228192a9f46a05fdde404c..cb5ea97b610303d2101ca937b4210f636348a794 100644 (file)
@@ -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),