From 0c4fb6dfcc56bdc1227ea355da1926389569721e Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Wed, 17 Mar 2021 09:42:03 +0100 Subject: [PATCH] CGAL may have infinite face vertex ranges. Calling vtc.size() may end up in an infinite loop. Also, quads do not appear in CGAL meshes. --- src/libslic3r/MeshBoolean.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/libslic3r/MeshBoolean.cpp b/src/libslic3r/MeshBoolean.cpp index 5a518d5806..7507e1c548 100644 --- a/src/libslic3r/MeshBoolean.cpp +++ b/src/libslic3r/MeshBoolean.cpp @@ -150,11 +150,20 @@ template TriangleMesh cgal_to_triangle_mesh(const _Mesh &cgalmesh) } for (auto &face : cgalmesh.faces()) { - auto vtc = cgalmesh.vertices_around_face(cgalmesh.halfedge(face)); - int i = 0; - Vec3i trface; - for (auto v : vtc) trface(i++) = static_cast(v); - facets.emplace_back(trface); + auto vtc = cgalmesh.vertices_around_face(cgalmesh.halfedge(face)); + + int i = 0; + Vec3i facet; + for (const auto &v : vtc) { + if (i > 2) { i = 0; break; } + facet(i++) = v; + } + + if (i == 3) { + facets.emplace_back(facet); + } else { + BOOST_LOG_TRIVIAL(error) << "CGAL face is not a triangle."; + } } TriangleMesh out{points, facets};