Skip to content

Commit

Permalink
QgisApp::handleDropUriList(): fix crash
Browse files Browse the repository at this point in the history
For example, if adding a GeoPackage layer from the browser, whose
geometry is unknown/mixed, and clicking on cancel in the dialog box
where selecting the sub-layer, QgsAppLayerHandling::addVectorLayer()
would return nullptr, and then postProcessAddedLayers() would
dereference it.
  • Loading branch information
rouault committed Oct 18, 2022
1 parent 65bf297 commit 52af184
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions src/app/qgisapp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2263,19 +2263,27 @@ QList< QgsMapLayer * > QgisApp::handleDropUriList( const QgsMimeDataUtils::UriLi
}
else if ( u.layerType == QLatin1String( "vector" ) )
{
addedLayers << QgsAppLayerHandling::addVectorLayer( uri, u.name, u.providerKey );
QgsMapLayer *layer = QgsAppLayerHandling::addVectorLayer( uri, u.name, u.providerKey );
if ( layer )
addedLayers << layer;
}
else if ( u.layerType == QLatin1String( "raster" ) )
{
addedLayers << QgsAppLayerHandling::addRasterLayer( uri, u.name, u.providerKey );
QgsMapLayer *layer = QgsAppLayerHandling::addRasterLayer( uri, u.name, u.providerKey );
if ( layer )
addedLayers << layer;
}
else if ( u.layerType == QLatin1String( "mesh" ) )
{
addedLayers << QgsAppLayerHandling::addMeshLayer( uri, u.name, u.providerKey );
QgsMapLayer *layer = QgsAppLayerHandling::addMeshLayer( uri, u.name, u.providerKey );
if ( layer )
addedLayers << layer;
}
else if ( u.layerType == QLatin1String( "pointcloud" ) )
{
addedLayers << QgsAppLayerHandling::addPointCloudLayer( uri, u.name, u.providerKey );
QgsMapLayer *layer = QgsAppLayerHandling::addPointCloudLayer( uri, u.name, u.providerKey );
if ( layer )
addedLayers << layer;
}
else if ( u.layerType == QLatin1String( "vector-tile" ) )
{
Expand Down Expand Up @@ -2365,7 +2373,9 @@ QList< QgsMapLayer * > QgisApp::handleDropUriList( const QgsMimeDataUtils::UriLi
}
else if ( u.layerType == QLatin1String( "plugin" ) )
{
addedLayers << QgsAppLayerHandling::addPluginLayer( uri, u.name, u.providerKey );
QgsMapLayer *layer = QgsAppLayerHandling::addPluginLayer( uri, u.name, u.providerKey );
if ( layer )
addedLayers << layer;
}
else if ( u.layerType == QLatin1String( "custom" ) )
{
Expand Down

0 comments on commit 52af184

Please sign in to comment.