aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2019-03-02 19:53:46 +0100
committerShauren <shauren.trinity@gmail.com>2021-11-24 20:34:56 +0100
commitbd0e9e7aa83f8fef35321832960dc127ddf5f1f0 (patch)
tree87d7f38b28fbf9922f57dd667caee4fb8bf28348 /src
parent3cfbf0aa1ba319145d4232da0a9e5788d31608d5 (diff)
Core/MMaps: Fix infinite loop in Detour
Fix another infinite loop in Detour caused by degenerated triangles. Check the result of some previously ignored Detour calls. Update recastnavigation to 3a619d773deb7e3a15ee215217c825995fe71312 and apply some more custom changes (cherry picked from commit c602220e02bed1ad76c9e60064eeec5fd97bfe80)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Movement/PathGenerator.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp
index c9dd1647268..7be391a5e80 100644
--- a/src/server/game/Movement/PathGenerator.cpp
+++ b/src/server/game/Movement/PathGenerator.cpp
@@ -818,10 +818,12 @@ dtStatus PathGenerator::FindSmoothPath(float const* startPos, float const* endPo
dtPolyRef visited[MAX_VISIT_POLY];
uint32 nvisited = 0;
- _navMeshQuery->moveAlongSurface(polys[0], iterPos, moveTgt, &_filter, result, visited, (int*)&nvisited, MAX_VISIT_POLY);
+ if (dtStatusFailed(_navMeshQuery->moveAlongSurface(polys[0], iterPos, moveTgt, &_filter, result, visited, (int*)&nvisited, MAX_VISIT_POLY)))
+ return DT_FAILURE;
npolys = FixupCorridor(polys, npolys, MAX_PATH_LENGTH, visited, nvisited);
- _navMeshQuery->getPolyHeight(polys[0], result, &result[1]);
+ if (dtStatusFailed(_navMeshQuery->getPolyHeight(polys[0], result, &result[1])))
+ return DT_FAILURE;
result[1] += 0.5f;
dtVcopy(iterPos, result);
@@ -866,7 +868,8 @@ dtStatus PathGenerator::FindSmoothPath(float const* startPos, float const* endPo
}
// Move position at the other side of the off-mesh link.
dtVcopy(iterPos, connectionEndPos);
- _navMeshQuery->getPolyHeight(polys[0], iterPos, &iterPos[1]);
+ if (dtStatusFailed(_navMeshQuery->getPolyHeight(polys[0], iterPos, &iterPos[1])))
+ return DT_FAILURE;
iterPos[1] += 0.5f;
}
}