From af1f65c2b27b8f50840363a6b627095698f05935 Mon Sep 17 00:00:00 2001
From: Tobias Leemann <tobias.leemann@fau.de>
Date: Sun, 10 Dec 2017 20:41:02 +0100
Subject: [PATCH] Fixed possible endless loop and normalization

---
 src/pe/collision/EPA.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/pe/collision/EPA.cpp b/src/pe/collision/EPA.cpp
index ed40e4153..2e0d0e889 100644
--- a/src/pe/collision/EPA.cpp
+++ b/src/pe/collision/EPA.cpp
@@ -277,7 +277,6 @@ bool EPA::doEPA( GeomPrimitive &geom1, GeomPrimitive &geom2, const GJK& gjk, Vec
       current = entryHeap.back();
       entryHeap.pop_back();
       if(!current->isObsolete()) {
-         WALBERLA_ASSERT_GREATER(current->getSqrDist(), real_t(0.0), "EPA_Trianalge distance is negative.");
          lowerBoundSqr = current->getSqrDist();
 
          if(epaVolume.size() == maxSupportPoints_) {
@@ -289,6 +288,10 @@ bool EPA::doEPA( GeomPrimitive &geom1, GeomPrimitive &geom2, const GJK& gjk, Vec
          // if origin is contained in plane, use out-facing normal.
          Vec3 normal;
          if(current->getSqrDist() < real_comparison::Epsilon<real_t>::value*real_comparison::Epsilon<real_t>::value){
+            if(current->getNormal().sqrLength() < real_comparison::Epsilon<real_t>::value*real_comparison::Epsilon<real_t>::value){
+               break;
+            }
+
             normal = current->getNormal().getNormalized();
          }else{
             normal = current->getClosest().getNormalized();
-- 
GitLab