kicad/common/geometry
Andreas Buhr b33bf2eafe fix double free and memory leak in SHAPE_POLY_SET
There were two problems in the triangulation caching
of SHAPE_POLY_SET:
First there was a double free:
While SHAPE_POLY_SET implements the copy constructor,
it did not implement the operator=, which resulted
in the default operator= being generated by the
compiler. The default operator= copied the member
m_triangulatedPolys, which is a std::vector of pointers.
So after operator= execution, there are two SHAPE_POLY_SET
having pointers to the same TRIANGULATED_POLYGONs, each
of them deleting them in their destructors. This led
to segfaults, because calling
TransformShapeWithClearanceToPolygon on a Zone
uses operator= to copy the contained SHAPE_POLY_SET.
The new SHAPE_POLY_SET then went out of scope and
deleted the cached triangulation within the Zone.

This first problem is fixed by implementing operator=
for SHAPE_POLY_SET.

Second, there was a memory leak: Calling
"CacheTriangulation" on a SHAPE_POLY_SET,
then changing the polygon and then calling
"CacheTriangulation" again led to
leaking the
triangulations generated in the first call.

This second problem is fixed by holding
the cached triangulations in a unique_ptr.
2017-12-08 14:55:46 +01:00
..
convex_hull.cpp Pcbnew: Add rounded rect pad shape. 2016-04-06 20:15:49 +02:00
hetriang.cpp New connectivity algorithm. 2017-06-23 11:12:36 +02:00
seg.cpp Coverity fixes. 2015-03-11 14:17:43 +01:00
shape.cpp router: snap to clearance boundaries in Highlight Collisions mode 2017-01-19 17:47:15 +01:00
shape_collisions.cpp pns: fixed a few memleaks & conditional jumps depending on uninitalized variables 2016-08-17 15:09:48 +02:00
shape_file_io.cpp SHAPE_FILE_IO: default constructor outputs to stdout 2017-12-05 14:54:57 +01:00
shape_line_chain.cpp refactoring: wrapped boost::optional in OPT<> class for the purpose of easier transition to C++17 in the future 2017-11-03 23:59:02 +01:00
shape_poly_set.cpp fix double free and memory leak in SHAPE_POLY_SET 2017-12-08 14:55:46 +01:00