diff options
author | = <=> | 2015-02-12 13:54:19 -0800 |
---|---|---|
committer | = <=> | 2015-02-12 13:54:19 -0800 |
commit | 99637cbc1a252b7c6496a200c655cb87543f48ef (patch) | |
tree | 453ba514e09ceb267a0c3b41d833b55f73402380 | |
parent | c8e252ba36efc19fe41cf780bff24a943d12a668 (diff) | |
download | bullet3-99637cbc1a252b7c6496a200c655cb87543f48ef.tar.gz |
fix HACD crash, thanks to gjaegy
See https://github.com/bulletphysics/bullet3/pull/277
-rw-r--r-- | Extras/HACD/hacdHACD.cpp | 6 | ||||
-rw-r--r-- | Extras/HACD/hacdICHull.cpp | 11 |
2 files changed, 14 insertions, 3 deletions
diff --git a/Extras/HACD/hacdHACD.cpp b/Extras/HACD/hacdHACD.cpp index 879f7921e..5c2edf217 100644 --- a/Extras/HACD/hacdHACD.cpp +++ b/Extras/HACD/hacdHACD.cpp @@ -24,6 +24,7 @@ #include <algorithm> #include <iterator> #include <limits> +#include "assert.h" bool gCancelRequest=false; namespace HACD @@ -437,7 +438,8 @@ namespace HACD for(size_t v = 1; v < nV; ++v) { ptIndex = verticesCH.GetHead()->GetData().m_name; - ch->AddPoint(m_points[ptIndex], ptIndex); + if (ptIndex != ICHull::sc_dummyIndex/* && ptIndex < m_nPoints*/) + ch->AddPoint(m_points[ptIndex], ptIndex); verticesCH.Next(); } delete gE.m_convexHull; @@ -845,3 +847,5 @@ namespace HACD } } } + + diff --git a/Extras/HACD/hacdICHull.cpp b/Extras/HACD/hacdICHull.cpp index 4ab5cfaf9..de2c7da92 100644 --- a/Extras/HACD/hacdICHull.cpp +++ b/Extras/HACD/hacdICHull.cpp @@ -265,7 +265,9 @@ namespace HACD // delete remaining points while (!vertices.GetData().m_tag) { - vertices.Delete(); + if (vertices.GetHead() == m_dummyVertex) + m_dummyVertex = 0; + vertices.Delete(); } if (m_isFlat) { @@ -563,6 +565,8 @@ namespace HACD // if no faces visible from p then p is inside the hull if (!visible && markVisibleFaces) { + if (vertices.GetHead() == m_dummyVertex) + m_dummyVertex = 0; vertices.Delete(); m_trianglesToDelete.clear(); return false; @@ -741,7 +745,9 @@ namespace HACD if (v->GetData().m_tag && !v->GetData().m_onHull) { CircularListElement<TMMVertex> * tmp = v->GetPrev(); - vertices.Delete(v); + if (tmp == m_dummyVertex) + m_dummyVertex = 0; + vertices.Delete(v); v = tmp; addedPoints--; } @@ -1010,3 +1016,4 @@ namespace HACD } } + |