Skip to content

Commit c6e3ac4

Browse files
shmoodyyyaothms
authored andcommitted
fix: memory leak from missing deletes of raw heap allocations; big issue within create_shape() python lib
1 parent 4594f59 commit c6e3ac4

4 files changed

Lines changed: 15 additions & 1 deletion

File tree

src/ifcgeom/AbstractKernel.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ ifcopenshell::geometry::kernels::AbstractKernel* ifcopenshell::geometry::kernels
206206
}
207207
#endif
208208
if (kernels.size() != n + 1) {
209+
for (auto k : kernels)
210+
delete k;
209211
throw IfcParse::IfcException("Invalid hybrid kernel " + geometry_library);
210212
}
211213
}

src/ifcgeom/Converter.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,16 @@ ifcopenshell::geometry::Converter::Converter(const std::string& geometry_library
1313
settings_ = mapping_->settings();
1414
}
1515

16+
ifcopenshell::geometry::Converter::~Converter()
17+
{
18+
if (kernel_ != nullptr) {
19+
delete kernel_;
20+
}
21+
if (mapping_ != nullptr) {
22+
delete mapping_;
23+
}
24+
}
25+
1626
namespace {
1727
void substitute_with_box_based_on_density(IfcGeom::ConversionResults& items, double& density) {
1828
int nv = 0;

src/ifcgeom/Converter.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace ifcopenshell { namespace geometry {
2828

2929
Converter(const std::string& geometry_library, IfcParse::IfcFile* file, ifcopenshell::geometry::Settings& settings);
3030

31-
~Converter() {}
31+
~Converter();
3232

3333
ifcopenshell::geometry::abstract_mapping* mapping() const { return mapping_; }
3434

src/ifcgeom/kernels/opencascade/boolean_utils.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -978,6 +978,7 @@ bool IfcGeom::util::boolean_operation(const boolean_settings& settings, const To
978978
if (b.Extent() == 0) {
979979
Logger::Warning("No other operands remaining, using first operand");
980980
result = a;
981+
delete builder;
981982
return true;
982983
}
983984

@@ -1130,6 +1131,7 @@ bool IfcGeom::util::boolean_operation(const boolean_settings& settings, const To
11301131
} else {
11311132
Logger::Notice("Processed fully in 2D");
11321133
result = mp.Shape();
1134+
delete builder;
11331135
return true;
11341136
}
11351137
} else {

0 commit comments

Comments
 (0)