Skip to content

Commit d62794d

Browse files
committedMay 21, 2015
[symbology] Fix potential crash in data defined symbol rotation
1 parent d9f54c4 commit d62794d

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed
 

‎src/core/symbology-ng/qgssymbolv2.cpp

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,15 @@ QgsDataDefined* scaleWholeSymbol( double scaleFactor, const QgsDataDefined& dd )
5858
}
5959

6060
inline
61-
QgsDataDefined* scaleWholeSymbol( double scaleFactorX, double scaleFactorY, const QgsDataDefined& dd )
61+
QgsDataDefined* scaleWholeSymbol( double scaleFactorX, double scaleFactorY, const QgsDataDefined& dd )
6262
{
6363
QgsDataDefined* scaledDD = new QgsDataDefined( dd );
6464
scaledDD->setUseExpression( true );
6565
QString exprString = dd.useExpression() ? dd.expressionString() : dd.field();
6666
scaledDD->setExpressionString(
67-
( scaleFactorX ? "tostring(" + QString::number( scaleFactorX ) + "*(" + exprString + "))" : "'0'" ) +
68-
"|| ',' || " +
69-
( scaleFactorY ? "tostring(" + QString::number( scaleFactorY ) + "*(" + exprString + "))" : "'0'" ));
67+
( scaleFactorX ? "tostring(" + QString::number( scaleFactorX ) + "*(" + exprString + "))" : "'0'" ) +
68+
"|| ',' || " +
69+
( scaleFactorY ? "tostring(" + QString::number( scaleFactorY ) + "*(" + exprString + "))" : "'0'" ) );
7070
return scaledDD;
7171
}
7272

@@ -631,13 +631,13 @@ QgsDataDefined QgsMarkerSymbolV2::dataDefinedAngle() const
631631

632632
if ( qgsDoubleNear( layer->angle(), symbolRotation ) )
633633
{
634-
if ( *layerAngleDD != *symbolDD )
634+
if ( !layerAngleDD || *layerAngleDD != *symbolDD )
635635
return QgsDataDefined();
636636
}
637637
else
638638
{
639639
QScopedPointer< QgsDataDefined > rotatedDD( rotateWholeSymbol( layer->angle() - symbolRotation, *symbolDD ) );
640-
if ( *layerAngleDD != *( rotatedDD.data() ) )
640+
if ( !layerAngleDD || *layerAngleDD != *( rotatedDD.data() ) )
641641
return QgsDataDefined();
642642
}
643643
}
@@ -707,8 +707,8 @@ void QgsMarkerSymbolV2::setDataDefinedSize( const QgsDataDefined &dd )
707707
if ( layer->offset().x() || layer->offset().y() )
708708
{
709709
layer->setDataDefinedProperty( "offset", scaleWholeSymbol(
710-
layer->offset().x() / symbolSize,
711-
layer->offset().y() / symbolSize, dd ) );
710+
layer->offset().x() / symbolSize,
711+
layer->offset().y() / symbolSize, dd ) );
712712
}
713713
}
714714
}
@@ -757,10 +757,9 @@ QgsDataDefined QgsMarkerSymbolV2::dataDefinedSize() const
757757
return QgsDataDefined();
758758
}
759759

760-
761760
QScopedPointer< QgsDataDefined > scaledOffsetDD( scaleWholeSymbol( layer->offset().x() / symbolSize, layer->offset().y() / symbolSize, *symbolDD ) );
762761
if ( layerOffsetDD && *layerOffsetDD != *( scaledOffsetDD.data() ) )
763-
return QgsDataDefined();
762+
return QgsDataDefined();
764763
}
765764

766765
return QgsDataDefined( *symbolDD );
@@ -961,7 +960,7 @@ QgsDataDefined QgsLineSymbolV2::dataDefinedWidth() const
961960

962961
QScopedPointer< QgsDataDefined > scaledOffsetDD( scaleWholeSymbol( layer->offset() / symbolWidth, *symbolDD ) );
963962
if ( layerOffsetDD && *layerOffsetDD != *( scaledOffsetDD.data() ) )
964-
return QgsDataDefined();
963+
return QgsDataDefined();
965964
}
966965

967966
return QgsDataDefined( *symbolDD );

0 commit comments

Comments
 (0)
Please sign in to comment.