summaryrefslogtreecommitdiff
path: root/Extras/HACD
diff options
context:
space:
mode:
author= <=>2015-02-12 13:54:19 -0800
committer= <=>2015-02-12 13:54:19 -0800
commit99637cbc1a252b7c6496a200c655cb87543f48ef (patch)
tree453ba514e09ceb267a0c3b41d833b55f73402380 /Extras/HACD
parentc8e252ba36efc19fe41cf780bff24a943d12a668 (diff)
downloadbullet3-99637cbc1a252b7c6496a200c655cb87543f48ef.tar.gz
fix HACD crash, thanks to gjaegy
See https://github.com/bulletphysics/bullet3/pull/277
Diffstat (limited to 'Extras/HACD')
-rw-r--r--Extras/HACD/hacdHACD.cpp6
-rw-r--r--Extras/HACD/hacdICHull.cpp11
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
}
}
+