Hi Cui, thanks for looking into this and submitting the patch - I will look into it. There is some extensive documentation for getting started with KDE development. However as Marble can be compiled without KDE dependencies there are lots of technical aspects that might not apply. <https://community.kde.org/Infrastructure/GitLab#Submitting_a_merge_request> <https://community.kde.org/Get_Involved/development#Submitting_your_first_patch> The actual repo is at https://invent.kde.org/education/marble Best regards Torsten -----Original-Nachricht----- Betreff: [Bugfix] Fix unconsistent remove in PlacemarkLayout Datum: 2023-03-25T15:24:45+0100 Von: "?? WANG Cui" <iucg...@msn.com> An: "Mailinglist, Marble-Devel" <marble-devel@kde.org>
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