From 9f02737a2e876f7fe4f14d0cd8b6c84960c8e75c Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 27 Sep 2024 16:31:49 +0500 Subject: [PATCH] Fix segfault trying to create IfcSweptDiskSolid with invalid curve #5474 In my case it was IfcIndexedPolyCurve with just 1 vertex. Though kernel->convert does return a boolean value to indicate if conversion was successful, we never used it - so it failed silently leading to segfault later on. Now we also stop processing those polycurves during mapping stage but checking kernel->convert result still might be useful in some other cases. --- src/ifcgeom/kernels/opencascade/loop.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ifcgeom/kernels/opencascade/loop.cpp b/src/ifcgeom/kernels/opencascade/loop.cpp index 18c658fd15..403d55835f 100644 --- a/src/ifcgeom/kernels/opencascade/loop.cpp +++ b/src/ifcgeom/kernels/opencascade/loop.cpp @@ -95,8 +95,10 @@ namespace { OpenCascadeKernel::curve_creation_visitor_result_type operator()(const taxonomy::loop::ptr& l) { TopoDS_Wire wire; - kernel->convert(l, wire); - return result = wire; + if (!kernel->convert(l, wire)) { + throw std::runtime_error("Failed to convert loop to wire"); + } + return result; } OpenCascadeKernel::curve_creation_visitor_result_type operator()(const taxonomy::edge::ptr& e) {