Skip to content

Commit

Permalink
Fix potential nullptr dereference issue in symbol to SLD conversion
Browse files Browse the repository at this point in the history
due to incorrect use of static_cast instead of dynamic_cast.

And cleanup logic to make it clearer.
  • Loading branch information
nyalldawson authored and github-actions[bot] committed Apr 23, 2021
1 parent 3e4acec commit a187241
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 8 deletions.
12 changes: 8 additions & 4 deletions src/core/symbology/qgsfillsymbollayer.cpp
Expand Up @@ -3628,15 +3628,19 @@ void QgsPointPatternFillSymbolLayer::toSld( QDomDocument &doc, QDomElement &elem
symbolizerElem.appendChild( distanceElem );

QgsSymbolLayer *layer = mMarkerSymbol->symbolLayer( i );
QgsMarkerSymbolLayer *markerLayer = static_cast<QgsMarkerSymbolLayer *>( layer );
if ( !markerLayer )
if ( QgsMarkerSymbolLayer *markerLayer = dynamic_cast<QgsMarkerSymbolLayer *>( layer ) )
{
QString errorMsg = QStringLiteral( "MarkerSymbolLayerV2 expected, %1 found. Skip it." ).arg( layer->layerType() );
markerLayer->writeSldMarker( doc, graphicFillElem, props );
}
else if ( layer )
{
QString errorMsg = QStringLiteral( "QgsMarkerSymbolLayer expected, %1 found. Skip it." ).arg( layer->layerType() );
graphicFillElem.appendChild( doc.createComment( errorMsg ) );
}
else
{
markerLayer->writeSldMarker( doc, graphicFillElem, props );
QString errorMsg = QStringLiteral( "Missing point pattern symbol layer. Skip it." );
graphicFillElem.appendChild( doc.createComment( errorMsg ) );
}
}
}
Expand Down
11 changes: 7 additions & 4 deletions src/core/symbology/qgslinesymbollayer.cpp
Expand Up @@ -2227,14 +2227,17 @@ void QgsMarkerLineSymbolLayer::toSld( QDomDocument &doc, QDomElement &element, c
strokeElem.appendChild( graphicStrokeElem );

QgsSymbolLayer *layer = mMarker->symbolLayer( i );
QgsMarkerSymbolLayer *markerLayer = static_cast<QgsMarkerSymbolLayer *>( layer );
if ( !markerLayer )
if ( QgsMarkerSymbolLayer *markerLayer = dynamic_cast<QgsMarkerSymbolLayer *>( layer ) )
{
graphicStrokeElem.appendChild( doc.createComment( QStringLiteral( "MarkerSymbolLayerV2 expected, %1 found. Skip it." ).arg( layer->layerType() ) ) );
markerLayer->writeSldMarker( doc, graphicStrokeElem, props );
}
else if ( layer )
{
graphicStrokeElem.appendChild( doc.createComment( QStringLiteral( "QgsMarkerSymbolLayer expected, %1 found. Skip it." ).arg( layer->layerType() ) ) );
}
else
{
markerLayer->writeSldMarker( doc, graphicStrokeElem, props );
graphicStrokeElem.appendChild( doc.createComment( QStringLiteral( "Missing marker line symbol layer. Skip it." ) ) );
}

if ( !gap.isEmpty() )
Expand Down

0 comments on commit a187241

Please sign in to comment.