Skip to content

Commit

Permalink
Fix nasty crash caused by converting MultiLineStrings to GML2
Browse files Browse the repository at this point in the history
Exporting the geometry to GML2 would corrupt it, causing a
future crash to occur
  • Loading branch information
nyalldawson committed Sep 25, 2017
1 parent 039aff6 commit 6d95ba0
Showing 1 changed file with 2 additions and 8 deletions.
10 changes: 2 additions & 8 deletions src/core/geometry/qgsmultilinestring.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -54,15 +54,11 @@ QDomElement QgsMultiLineString::asGML2( QDomDocument &doc, int precision, const
QDomElement elemMultiLineString = doc.createElementNS( ns, QStringLiteral( "MultiLineString" ) ); QDomElement elemMultiLineString = doc.createElementNS( ns, QStringLiteral( "MultiLineString" ) );
for ( const QgsAbstractGeometry *geom : mGeometries ) for ( const QgsAbstractGeometry *geom : mGeometries )
{ {
if ( qgsgeometry_cast<const QgsLineString *>( geom ) ) if ( const QgsLineString *lineString = qgsgeometry_cast<const QgsLineString *>( geom ) )
{ {
const QgsLineString *lineString = static_cast<const QgsLineString *>( geom );

QDomElement elemLineStringMember = doc.createElementNS( ns, QStringLiteral( "lineStringMember" ) ); QDomElement elemLineStringMember = doc.createElementNS( ns, QStringLiteral( "lineStringMember" ) );
elemLineStringMember.appendChild( lineString->asGML2( doc, precision, ns ) ); elemLineStringMember.appendChild( lineString->asGML2( doc, precision, ns ) );
elemMultiLineString.appendChild( elemLineStringMember ); elemMultiLineString.appendChild( elemLineStringMember );

delete lineString;
} }
} }


Expand All @@ -74,10 +70,8 @@ QDomElement QgsMultiLineString::asGML3( QDomDocument &doc, int precision, const
QDomElement elemMultiCurve = doc.createElementNS( ns, QStringLiteral( "MultiCurve" ) ); QDomElement elemMultiCurve = doc.createElementNS( ns, QStringLiteral( "MultiCurve" ) );
for ( const QgsAbstractGeometry *geom : mGeometries ) for ( const QgsAbstractGeometry *geom : mGeometries )
{ {
if ( qgsgeometry_cast<const QgsLineString *>( geom ) ) if ( const QgsLineString *lineString = qgsgeometry_cast<const QgsLineString *>( geom ) )
{ {
const QgsLineString *lineString = static_cast<const QgsLineString *>( geom );

QDomElement elemCurveMember = doc.createElementNS( ns, QStringLiteral( "curveMember" ) ); QDomElement elemCurveMember = doc.createElementNS( ns, QStringLiteral( "curveMember" ) );
elemCurveMember.appendChild( lineString->asGML3( doc, precision, ns ) ); elemCurveMember.appendChild( lineString->asGML3( doc, precision, ns ) );
elemMultiCurve.appendChild( elemCurveMember ); elemMultiCurve.appendChild( elemCurveMember );
Expand Down

0 comments on commit 6d95ba0

Please sign in to comment.