fix: memory leak from missing deletes of raw heap allocations; big issue within create_shape() python lib

This commit is contained in:
shmoodyyy
2025-03-23 14:42:12 +01:00
committed by Thomas Krijnen
parent 4594f596c2
commit c6e3ac4155
4 changed files with 15 additions and 1 deletions
+2
View File
@@ -206,6 +206,8 @@ ifcopenshell::geometry::kernels::AbstractKernel* ifcopenshell::geometry::kernels
}
#endif
if (kernels.size() != n + 1) {
for (auto k : kernels)
delete k;
throw IfcParse::IfcException("Invalid hybrid kernel " + geometry_library);
}
}
+10
View File
@@ -13,6 +13,16 @@ ifcopenshell::geometry::Converter::Converter(const std::string& geometry_library
settings_ = mapping_->settings();
}
ifcopenshell::geometry::Converter::~Converter()
{
if (kernel_ != nullptr) {
delete kernel_;
}
if (mapping_ != nullptr) {
delete mapping_;
}
}
namespace {
void substitute_with_box_based_on_density(IfcGeom::ConversionResults& items, double& density) {
int nv = 0;
+1 -1
View File
@@ -28,7 +28,7 @@ namespace ifcopenshell { namespace geometry {
Converter(const std::string& geometry_library, IfcParse::IfcFile* file, ifcopenshell::geometry::Settings& settings);
~Converter() {}
~Converter();
ifcopenshell::geometry::abstract_mapping* mapping() const { return mapping_; }
@@ -978,6 +978,7 @@ bool IfcGeom::util::boolean_operation(const boolean_settings& settings, const To
if (b.Extent() == 0) {
Logger::Warning("No other operands remaining, using first operand");
result = a;
delete builder;
return true;
}
@@ -1130,6 +1131,7 @@ bool IfcGeom::util::boolean_operation(const boolean_settings& settings, const To
} else {
Logger::Notice("Processed fully in 2D");
result = mp.Shape();
delete builder;
return true;
}
} else {