From 9fca1aca3a9069a61ff8230926283c2fdc4c5976 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Tue, 5 May 2020 13:08:38 +0200 Subject: [PATCH] catch errors during iterator construction --- src/ifcgeom_schema_agnostic/IfcGeomIterator.h | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/ifcgeom_schema_agnostic/IfcGeomIterator.h b/src/ifcgeom_schema_agnostic/IfcGeomIterator.h index 50d15c1917..58a2b21d1b 100644 --- a/src/ifcgeom_schema_agnostic/IfcGeomIterator.h +++ b/src/ifcgeom_schema_agnostic/IfcGeomIterator.h @@ -87,7 +87,12 @@ namespace IfcGeom { : file_(file) , settings_(settings) { - implementation_ = iterator_implementations().construct(file_->schema()->name(), settings, file, filters_, num_threads); + try { + implementation_ = iterator_implementations().construct(file_->schema()->name(), settings, file, filters_, num_threads); + } catch (const std::exception& e) { + Logger::Error(e); + implementation_ = nullptr; + } } Iterator(const IfcGeom::IteratorSettings& settings, IfcParse::IfcFile* file, const std::vector& filters, size_t num_threads = 1) @@ -95,11 +100,20 @@ namespace IfcGeom { , settings_(settings) , filters_(filters) { - implementation_ = iterator_implementations().construct(file_->schema()->name(), settings, file, filters_, num_threads); + try { + implementation_ = iterator_implementations().construct(file_->schema()->name(), settings, file, filters_, num_threads); + } catch (const std::exception& e) { + Logger::Error(e); + implementation_ = nullptr; + } } bool initialize() { - return implementation_->initialize(); + if (implementation_) { + return implementation_->initialize(); + } else { + return false; + } } int progress() const { return implementation_->progress(); }