[geos-devel] [GEOS] #1010: Leak in GEOSLineMerge_r
GEOS
geos-trac at osgeo.org
Wed Jan 15 11:09:59 PST 2020
#1010: Leak in GEOSLineMerge_r
------------------------+--------------------------
Reporter: Algunenano | Owner: geos-devel@…
Type: defect | Status: new
Priority: major | Milestone: 3.9.0
Component: Default | Version: master
Severity: Unassigned | Keywords:
------------------------+--------------------------
From Postgis tests with HEAD:
{{{
$ valgrind --leak-check=full --show-leak-kinds=all ./cunit/cu_tester
test_geos_linemerge
==548693== 40 bytes in 1 blocks are indirectly lost in loss record 2 of 6
==548693== at 0x4838DEF: operator new(unsigned long)
(vg_replace_malloc.c:344)
==548693== by 0x5C8C098:
geos::operation::linemerge::EdgeString::getCoordinates()
(EdgeString.cpp:66)
==548693== by 0x5C8C1FD:
geos::operation::linemerge::EdgeString::toLineString() (EdgeString.cpp:96)
==548693== by 0x5C8D4CE:
geos::operation::linemerge::LineMerger::merge() (LineMerger.cpp:130)
==548693== by 0x5C8DADD:
geos::operation::linemerge::LineMerger::getMergedLineStrings()
(LineMerger.cpp:233)
==548693== by 0x4BF67CA: operator() (geos_ts_c.cpp:1896)
==548693== by 0x4BF67CA: execute<(lambda at geos_ts_c.cpp:1890:35),
nullptr> (geos_ts_c.cpp:377)
==548693== by 0x4BF67CA: GEOSLineMerge_r (geos_ts_c.cpp:1890)
==548693== by 0x1AB257: lwgeom_linemerge (lwgeom_geos.c:727)
==548693== by 0x125E18: test_geos_linemerge (cu_geos.c:89)
==548693== by 0x4884117: ??? (in /usr/lib/libcunit.so.1.0.1)
==548693== by 0x4884AAF: CU_run_test (in /usr/lib/libcunit.so.1.0.1)
==548693== by 0x158A12: main (cu_tester.c:226)
==548693==
==548693== 96 bytes in 1 blocks are indirectly lost in loss record 3 of 6
==548693== at 0x4838DEF: operator new(unsigned long)
(vg_replace_malloc.c:344)
==548693== by 0x5C184A1: allocate (new_allocator.h:114)
==548693== by 0x5C184A1: allocate (alloc_traits.h:444)
==548693== by 0x5C184A1: _M_allocate (stl_vector.h:343)
==548693== by 0x5C184A1: _M_realloc_insert<const geos::geom::Coordinate
&> (vector.tcc:440)
==548693== by 0x5C184A1: push_back (stl_vector.h:1195)
==548693== by 0x5C184A1:
geos::geom::CoordinateArraySequence::add(geos::geom::Coordinate const&,
bool) (CoordinateArraySequence.cpp:135)
==548693== by 0x5C185F9:
geos::geom::CoordinateArraySequence::add(geos::geom::CoordinateSequence
const*, bool, bool) (CoordinateArraySequence.cpp:146)
==548693== by 0x5C8C15D:
geos::operation::linemerge::EdgeString::getCoordinates()
(EdgeString.cpp:79)
==548693== by 0x5C8C1FD:
geos::operation::linemerge::EdgeString::toLineString() (EdgeString.cpp:96)
==548693== by 0x5C8D4CE:
geos::operation::linemerge::LineMerger::merge() (LineMerger.cpp:130)
==548693== by 0x5C8DADD:
geos::operation::linemerge::LineMerger::getMergedLineStrings()
(LineMerger.cpp:233)
==548693== by 0x4BF67CA: operator() (geos_ts_c.cpp:1896)
==548693== by 0x4BF67CA: execute<(lambda at geos_ts_c.cpp:1890:35),
nullptr> (geos_ts_c.cpp:377)
==548693== by 0x4BF67CA: GEOSLineMerge_r (geos_ts_c.cpp:1890)
==548693== by 0x1AB257: lwgeom_linemerge (lwgeom_geos.c:727)
==548693== by 0x125E18: test_geos_linemerge (cu_geos.c:89)
==548693== by 0x4884117: ??? (in /usr/lib/libcunit.so.1.0.1)
==548693== by 0x4884AAF: CU_run_test (in /usr/lib/libcunit.so.1.0.1)
}}}
The bisection points to
https://github.com/libgeos/geos/commit/7a7cbf84fc5d4369baaf4c6e0614f44d4207503f
as the culprit.
I've tried to readd the removed `delete` call but it doesn't fix it:
- delete didn't fix it: https://github.com/Algunenano/geos/commit/f40a4eb8
- unique_ptr didn't fix it:
https://github.com/Algunenano/geos/commit/3e5f8c59
- full revert does fix it:
https://github.com/Algunenano/geos/commit/0e40b08a
I'm not sure what is causing the leak in the changes, so I'm not opening a
PR yet, but feel free to fix it if you see what the issue is.
--
Ticket URL: <https://trac.osgeo.org/geos/ticket/1010>
GEOS <http://trac.osgeo.org/geos>
GEOS (Geometry Engine - Open Source) is a C++ port of the Java Topology Suite (JTS).
More information about the geos-devel
mailing list