From 0cd38217d451778729acf87fe1464900bb3289c4 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Sat, 10 Oct 2020 17:32:15 +0200 Subject: [PATCH] Prevent crash when removing a globebrowsing layer --- apps/OpenSpace/ext/sgct | 2 +- modules/globebrowsing/src/layergroup.cpp | 5 ++++- modules/globebrowsing/src/tileprovider.cpp | 3 +++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/OpenSpace/ext/sgct b/apps/OpenSpace/ext/sgct index 1dd1160fbf..f90ab136ef 160000 --- a/apps/OpenSpace/ext/sgct +++ b/apps/OpenSpace/ext/sgct @@ -1 +1 @@ -Subproject commit 1dd1160fbf62427a8094cb74488690769e63900a +Subproject commit f90ab136efee69581f0a9a42651f2ebede7b292a diff --git a/modules/globebrowsing/src/layergroup.cpp b/modules/globebrowsing/src/layergroup.cpp index ca175a1658..b546ae894e 100644 --- a/modules/globebrowsing/src/layergroup.cpp +++ b/modules/globebrowsing/src/layergroup.cpp @@ -153,6 +153,9 @@ void LayerGroup::deleteLayer(const std::string& layerName) { ++it) { if (it->get()->identifier() == layerName) { + // we need to make a copy as the layername is only a reference + // which will no longer be valid once it is deleted + std::string name = layerName; removePropertySubOwner(it->get()); (*it)->deinitialize(); _layers.erase(it); @@ -160,7 +163,7 @@ void LayerGroup::deleteLayer(const std::string& layerName) { if (_onChangeCallback) { _onChangeCallback(nullptr); } - LINFO("Deleted layer " + layerName); + LINFO("Deleted layer " + name); if (_layers.empty()) { _levelBlendingEnabled.setVisibility( diff --git a/modules/globebrowsing/src/tileprovider.cpp b/modules/globebrowsing/src/tileprovider.cpp index 62483e127b..2c2cde681b 100644 --- a/modules/globebrowsing/src/tileprovider.cpp +++ b/modules/globebrowsing/src/tileprovider.cpp @@ -459,6 +459,9 @@ std::string consumeTemporalMetaData(TemporalTileProvider& t, const std::string& } else { gdalNode = CPLSearchXMLNode(node, "FilePath"); + if (gdalNode) { + return ""; + } std::string gdalDescription = std::string(gdalNode->psChild->pszValue); return gdalDescription; }