Opened 6 years ago

Closed 5 years ago

#929 closed defect (fixed)

Memory sanitizer warnings in GeometryFactory.cpp

Reported by: Algunenano Owned by: geos-devel@…
Priority: major Milestone: 3.5.3
Component: Default Version: 3.5.0
Severity: Unassigned Keywords:
Cc:

Description

When running Postgis cunit tests using clang's (6.0.1) memory sanitizer (-fsanitize=memory) I get the following warning:

Suite: buildarea
  Test: buildarea1 ...Uninitialized bytes in __interceptor_memcmp at offset 0 inside [0x7fffae24fa80, 4)
==19345==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x7f5ed6768c5f in std::char_traits<char>::compare(char const*, char const*, unsigned long) /build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/char_traits.h:310:25
    #1 0x7f5ed6768c5f in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(char const*) const /build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.tcc:1424:37
    #2 0x7f5ed6892f40 in bool std::operator==<char, std::char_traits<char>, std::allocator<char> >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*) /usr/include/c++/8.2.1/bits/basic_string.h:6075:35
    #3 0x7f5ed6892f40 in geos::geom::GeometryFactory::buildGeometry(std::vector<geos::geom::Geometry*, std::allocator<geos::geom::Geometry*> >*) const /usr/src/debug/geos/src/geom/GeometryFactory.cpp:664:16
    #4 0x7f5ed690dd48 in geos::operation::overlay::OverlayOp::computeOverlay(geos::operation::overlay::OverlayOp::OpCode) /usr/src/debug/geos/src/operation/overlay/OverlayOp.cpp:839:28
    #5 0x7f5ed690dee1 in geos::operation::overlay::OverlayOp::getResultGeometry(geos::operation::overlay::OverlayOp::OpCode) /usr/src/debug/geos/src/operation/overlay/OverlayOp.cpp:187:16
    #6 0x7f5ed690e281 in geos::operation::overlay::OverlayOp::overlayOp(geos::geom::Geometry const*, geos::geom::Geometry const*, geos::operation::overlay::OverlayOp::OpCode) /usr/src/debug/geos/src/operation/overlay/OverlayOp.cpp:93:30
    #7 0x7f5ed688d11f in geos::operation::overlay::overlayOp::operator()(geos::geom::Geometry const*, geos::geom::Geometry const*) /usr/src/debug/geos/src/geom/../../include/geos/operation/overlay/OverlayOp.h:388:44
    #8 0x7f5ed688d11f in std::unique_ptr<geos::geom::Geometry, std::default_delete<geos::geom::Geometry> > geos::geom::BinaryOp<geos::operation::overlay::overlayOp>(geos::geom::Geometry const*, geos::geom::Geometry const*, geos::operation::overlay::overlayOp) /usr/src/debug/geos/src/geom/../../include/geos/geom/BinaryOp.h:357:3
    #9 0x7f5ed688b16f in geos::geom::Geometry::Union(geos::geom::Geometry const*) const /usr/src/debug/geos/src/geom/Geometry.cpp:586:17
    #10 0x7f5ed691885d in geos::operation::geounion::CascadedPolygonUnion::unionActual(geos::geom::Geometry*, geos::geom::Geometry*) /usr/src/debug/geos/src/operation/union/CascadedPolygonUnion.cpp:370:36
    #11 0x7f5ed6919080 in geos::operation::geounion::CascadedPolygonUnion::unionOptimized(geos::geom::Geometry*, geos::geom::Geometry*) /usr/src/debug/geos/src/operation/union/CascadedPolygonUnion.cpp:236:27
    #12 0x7f5ed6919252 in geos::operation::geounion::CascadedPolygonUnion::unionTree(geos::index::strtree::ItemsList*) /usr/src/debug/geos/src/operation/union/CascadedPolygonUnion.cpp:162:23
    #13 0x7f5ed6919630 in geos::operation::geounion::CascadedPolygonUnion::Union() /usr/src/debug/geos/src/operation/union/CascadedPolygonUnion.cpp:151:21
    #14 0x7f5ed691983d in geos::operation::geounion::CascadedPolygonUnion::Union(geos::geom::MultiPolygon const*) /usr/src/debug/geos/src/operation/union/CascadedPolygonUnion.cpp:124:20
    #15 0x7f5ed71db6a8 in GEOSUnionCascaded_r /usr/src/debug/geos/capi/geos_ts_c.cpp:2497:43
    #16 0x7f5ed7332ed6 in LWGEOM_GEOS_buildArea /home/raul/dev/public/postgis/liblwgeom/lwgeom_geos.c:1124:8
    #17 0x7f5ed7333164 in lwgeom_buildarea /home/raul/dev/public/postgis/liblwgeom/lwgeom_geos.c:1155:7
    #18 0x55b755e00bfa in buildarea1 /un/dev_public/postgis/liblwgeom/cunit/cu_buildarea.c:66:9
    #19 0x7f5ed6fb1117  (/usr/lib/libcunit.so.1+0x4117)
    #20 0x7f5ed6fb13b1  (/usr/lib/libcunit.so.1+0x43b1)
    #21 0x7f5ed6fb17b6 in CU_run_all_tests (/usr/lib/libcunit.so.1+0x47b6)
    #22 0x55b755e7f6b7 in main /un/dev_public/postgis/liblwgeom/cunit/cu_tester.c:177:13
    #23 0x7f5ed6c3c222 in __libc_start_main (/usr/lib/libc.so.6+0x24222)
    #24 0x55b755d7f0bd in _start (/un/dev_public/postgis/liblwgeom/cunit/.libs/lt-cu_tester+0x250bd)

SUMMARY: MemorySanitizer: use-of-uninitialized-value /build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/char_traits.h:310:25 in std::char_traits<char>::compare(char const*, char const*, unsigned long)

I've tested 3.5 and 3.7 and both are affected.

PR with the fix (for 3.7): https://github.com/libgeos/geos/pull/129

Change History (1)

comment:1 by Algunenano, 5 years ago

Resolution: fixed
Status: newclosed

This was merged into master

Note: See TracTickets for help on using tickets.