Hi,
When I check Marble GitHub, but don't find guidance which branch to do pull 
request, therefore I submit bugfix patch here.
In PlacemarkLayout, when remove a placemark, m_paintOrder item is not removed 
when m_visiblePlacemarks remove item. In extreme case ( i.e. updateFeature() 
during plugin render() ), the m_paintOrder refer to deleted Placemark then 
segmentation fault.
Patch is as attached.

diff --git a/src/lib/marble/PlacemarkLayout.cpp 
b/src/lib/marble/PlacemarkLayout.cpp
index a66a1f46c..3c684b662 100644
--- a/src/lib/marble/PlacemarkLayout.cpp
+++ b/src/lib/marble/PlacemarkLayout.cpp
@@ -271,6 +271,7 @@ void PlacemarkLayout::removePlacemarks( const QModelIndex& 
parent, int first, in

         int zoomLevel = placemark->zoomLevel();
         TileId key = TileId::fromCoordinates( coordinates, zoomLevel );
+        m_paintOrder.erase(std::remove(m_paintOrder.begin(), 
m_paintOrder.end(), m_visiblePlacemarks[placemark]), m_paintOrder.end());
         delete m_visiblePlacemarks[placemark];
         m_visiblePlacemarks.remove(placemark);
         m_placemarkCache[key].removeAll( placemark );

WANG Cui

Attachment: bugfix.patch
Description: bugfix.patch

Reply via email to