From 99637cbc1a252b7c6496a200c655cb87543f48ef Mon Sep 17 00:00:00 2001 From: = <=> Date: Thu, 12 Feb 2015 13:54:19 -0800 Subject: [PATCH] fix HACD crash, thanks to gjaegy See https://github.com/bulletphysics/bullet3/pull/277 --- Extras/HACD/hacdHACD.cpp | 6 +++++- 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 #include #include +#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 * 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 } } +