Ticket #2317 (closed defect: fixed)

Opened 5 years ago

Last modified 4 years ago

Crash after downloading OSM data

Reported by: tom_verbeure@… Owned by: Koying
Priority: blocker Milestone:
Component: merkaartor Version:
Keywords: Cc:

Description

  • MacOS
  • version 0.14, compiled from source
  • QT 4.5.1

Repro steps (consistent):

  • Import file skeggs.gpx (attached)
  • zoom out 5 times or so
  • "Download More"
  • Zoom in
  • Crash
Reading symbols for shared libraries . done
****  "2009-09-26T05:00:39"  -- Starting  "Merkaartor 0.14" 
------- "using QT version 4.5.1 (built with 4.5.1)" 
------- on Mac OS/X 
MerkaartorPreferences::fromOsmPref : "GET /api/0.6/user/preferences/" 
Downloader::go:  "/api/0.6/map?bbox=-122.344287,37.391290,-122.297177,37.425979" 
Downloader::on_responseHeaderReceived:  200 "OK" 
../include/ggl/algorithms/overlay/traverse.hpp:150: failed assertion `i++ <= intersection_points.size()'

Program received signal SIGABRT, Aborted.
0x90ef4e42 in __kill ()
(gdb) bt
#0  0x90ef4e42 in __kill ()
#1  0x90ef4e34 in kill$UNIX2003 ()
#2  0x90f6723a in raise ()
#3  0x90f73679 in abort ()
#4  0x002abbed in __eprintf (string=0x0, expression=0x0, line=0, filename=0x0) at /var/tmp/gcc/gcc-5493~1/src/gcc/libgcc2.c:1838
#5  0x0014d1a5 in ggl::traverse<ggl::linear_ring<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::allocator>, ggl::polygon<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::vector, std::allocator, std::allocator>, ggl::box<ggl::point_xy<double, ggl::cs::cartesian> >, std::deque<ggl::detail::intersection::intersection_point<ggl::point_xy<double, ggl::cs::cartesian> >, std::allocator<ggl::detail::intersection::intersection_point<ggl::point_xy<double, ggl::cs::cartesian> > > >, std::back_insert_iterator<std::vector<ggl::linear_ring<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::allocator>, std::allocator<ggl::linear_ring<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::allocator> > > > > (geometry1=@0xbfffcf74, geometry2=@0xbfffcf10, direction=-1, intersection_points=@0xbfffcdb4, out={<> = {<No data fields>}, container = 0xbfffcdf8}) at traverse.hpp:150
#6  0x00152d9a in ggl::detail::intersection::intersection_polygon_box<ggl::polygon<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::vector, std::allocator, std::allocator>, ggl::box<ggl::point_xy<double, ggl::cs::cartesian> >, std::back_insert_iterator<std::vector<ggl::polygon<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::vector, std::allocator, std::allocator>, std::allocator<ggl::polygon<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::vector, std::allocator, std::allocator> > > >, ggl::polygon<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::vector, std::allocator, std::allocator> >::apply (polygon=@0xbfffcf74, box=@0xbfffcf10, out={<> = {<No data fields>}, container = 0xbfffcf68}) at intersection.hpp:218
#7  0x00152f1b in ggl::dispatch::intersection_reversed<ggl::box_tag, ggl::polygon_tag, ggl::polygon_tag, ggl::box<ggl::point_xy<double, ggl::cs::cartesian> >, ggl::polygon<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::vector, std::allocator, std::allocator>, std::back_insert_iterator<std::vector<ggl::polygon<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::vector, std::allocator, std::allocator>, std::allocator<ggl::polygon<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::vector, std::allocator, std::allocator> > > >, ggl::polygon<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::vector, std::allocator, std::allocator> >::apply (g1=@0xbfffcf10, g2=@0xbfffcf74, out={<> = {<No data fields>}, container = 0xbfffcf68}) at intersection.hpp:380
#8  0x00152f3d in ggl::intersection<ggl::polygon<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::vector, std::allocator, std::allocator>, ggl::box<ggl::point_xy<double, ggl::cs::cartesian> >, ggl::polygon<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::vector, std::allocator, std::allocator>, std::back_insert_iterator<std::vector<ggl::polygon<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::vector, std::allocator, std::allocator>, std::allocator<ggl::polygon<ggl::point_xy<double, ggl::cs::cartesian>, std::vector, std::vector, std::allocator, std::allocator> > > > > (geometry1=@0xbfffcf10, geometry2=@0xbfffcf74, out={<> = {<No data fields>}, container = 0xbfffcf68}) at intersection.hpp:439
#9  0x0013a6da in Road::buildPath (this=0x1ae000b0, theProjection=@0x18f2f618, cr=@0xbfffd208) at Maps/Road.cpp:624
#10 0x0016f4ca in MapView::buildFeatureSet (this=0x18f2f600) at MapView.cpp:332
#11 0x0016f891 in MapView::paintEvent (this=0x18f2f600, anEvent=0xbfffd8dc) at MapView.cpp:190
#12 0x029eb32e in QWidget::event ()
#13 0x00169839 in MapView::event (this=0x18f2f600, event=0xbfffd8dc) at MapView.cpp:1172
#14 0x0299eb9f in QApplicationPrivate::notify_helper ()
#15 0x029a59dc in QApplication::notify ()
#16 0x034e0ba2 in QCoreApplication::notifyInternal ()
#17 0x02945680 in QWidgetPrivate::qt_widget_event ()
#18 0x9489b13d in DispatchEventToHandlers ()
#19 0x9489a57b in SendEventToEventTargetInternal ()
#20 0x9489a3e0 in SendEventToEventTargetWithOptions ()
#21 0x948bdded in HIView::SendDraw ()
#22 0x948bd8c6 in HIView::RecursiveDrawComposited ()
#23 0x948bda2f in HIView::RecursiveDrawComposited ()
#24 0x948bda2f in HIView::RecursiveDrawComposited ()
#25 0x948bda2f in HIView::RecursiveDrawComposited ()
#26 0x948bcccc in HIView::DrawComposited ()
#27 0x948bc9df in HIView::Draw ()
#28 0x948bc92f in HIView::Render ()
#29 0x948c4d67 in FlushWindowObject ()
#30 0x948c477e in FlushAllBuffers ()
#31 0x97091772 in __CFRunLoopDoObservers ()
#32 0x970929a2 in CFRunLoopRunSpecific ()
#33 0x97093aa8 in CFRunLoopRunInMode ()
#34 0x948c32ac in RunCurrentEventLoopInMode ()
#35 0x948c2ffe in ReceiveNextEventCommon ()
#36 0x94a06377 in ReceiveNextEvent ()
#37 0x0294a699 in QEventDispatcherMac::processEvents ()
#38 0x034e0151 in QEventLoop::processEvents ()
#39 0x034e02fd in QEventLoop::exec ()
#40 0x034e414e in QCoreApplication::exec ()
#41 0x001ca547 in main (argc=1, argv=0xbffff03c) at Main.cpp:201
(gdb) 
}}}}

Attachments

skeggs.gpx Download (39.6 KB) - added by tom_verbeure@… 5 years ago.
File used to reproduce crash

Change History

Changed 5 years ago by tom_verbeure@…

File used to reproduce crash

comment:1 Changed 5 years ago by tom_verbeure@…

I tried this out on the released 0.14 version of Merkaartor on Windows. It has the same crashing behavior.

comment:2 Changed 5 years ago by tom_verbeure@…

It seems to crash on the following way: http://www.openstreetmap.org/?way=25797673

Looks like this way is using a hack to cut out an inner hole instead of using a multi-polygon, so this is likely the reason for the crash. One speculation further: this may very well be a case of ggl not knowing how to deal with such polygons...

It's tempting to just fix the polygon and move on, but that would obviously make the bug unreproducable, so I'll refrain from that for now...

comment:3 Changed 5 years ago by Koying

  • Owner changed from cbro@… to Koying
  • Status changed from new to assigned

That's very ugly indeed...

I'll check if updating ggl would solve the problem.

comment:4 Changed 5 years ago by Koying

  • Priority changed from major to blocker

comment:5 Changed 4 years ago by koying

  • Status changed from assigned to closed
  • Resolution set to fixed

(In [18201]) FIX : crash with self-intersecting polygons (fixes #2317) UPD : ggl sync

Note: See TracTickets for help on using tickets.