From 59485f33bf53c5f8d6c810aa8cc0e66094fd4cf0 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Mon, 14 Jan 2019 16:46:49 +1000 Subject: [PATCH] Fix potential crash when removing entities from a style (cherry picked from commit 4b154a4a88f1d9e60f5b30aa835d7f18ff5d8635) --- src/core/symbology/qgsstylemodel.cpp | 32 +++++++++++++++++----------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/core/symbology/qgsstylemodel.cpp b/src/core/symbology/qgsstylemodel.cpp index 75551132cf96..4679bfa3dd43 100644 --- a/src/core/symbology/qgsstylemodel.cpp +++ b/src/core/symbology/qgsstylemodel.cpp @@ -117,15 +117,18 @@ QVariant QgsStyleModel::data( const QModelIndex &index, int role ) const return icon; std::unique_ptr< QgsSymbol > symbol( mStyle->symbol( name ) ); - if ( mAdditionalSizes.isEmpty() ) - icon.addPixmap( QgsSymbolLayerUtils::symbolPreviewPixmap( symbol.get(), QSize( 24, 24 ), 1 ) ); - - for ( const QVariant &size : mAdditionalSizes ) + if ( symbol ) { - QSize s = size.toSize(); - icon.addPixmap( QgsSymbolLayerUtils::symbolPreviewPixmap( symbol.get(), s, static_cast< int >( s.width() * ICON_PADDING_FACTOR ) ) ); - } + if ( mAdditionalSizes.isEmpty() ) + icon.addPixmap( QgsSymbolLayerUtils::symbolPreviewPixmap( symbol.get(), QSize( 24, 24 ), 1 ) ); + + for ( const QVariant &size : mAdditionalSizes ) + { + QSize s = size.toSize(); + icon.addPixmap( QgsSymbolLayerUtils::symbolPreviewPixmap( symbol.get(), s, static_cast< int >( s.width() * ICON_PADDING_FACTOR ) ) ); + } + } mSymbolIconCache.insert( name, icon ); return icon; } @@ -137,14 +140,17 @@ QVariant QgsStyleModel::data( const QModelIndex &index, int role ) const return icon; std::unique_ptr< QgsColorRamp > ramp( mStyle->colorRamp( name ) ); - if ( mAdditionalSizes.isEmpty() ) - icon.addPixmap( QgsSymbolLayerUtils::colorRampPreviewPixmap( ramp.get(), QSize( 24, 24 ), 1 ) ); - for ( const QVariant &size : mAdditionalSizes ) + if ( ramp ) { - QSize s = size.toSize(); - icon.addPixmap( QgsSymbolLayerUtils::colorRampPreviewPixmap( ramp.get(), s, static_cast< int >( s.width() * ICON_PADDING_FACTOR ) ) ); - } + if ( mAdditionalSizes.isEmpty() ) + icon.addPixmap( QgsSymbolLayerUtils::colorRampPreviewPixmap( ramp.get(), QSize( 24, 24 ), 1 ) ); + for ( const QVariant &size : mAdditionalSizes ) + { + QSize s = size.toSize(); + icon.addPixmap( QgsSymbolLayerUtils::colorRampPreviewPixmap( ramp.get(), s, static_cast< int >( s.width() * ICON_PADDING_FACTOR ) ) ); + } + } mColorRampIconCache.insert( name, icon ); return icon; }