diff --git a/src/core/geometry/qgsgeos.cpp b/src/core/geometry/qgsgeos.cpp index 8d0616b733d..015c8d75e33 100644 --- a/src/core/geometry/qgsgeos.cpp +++ b/src/core/geometry/qgsgeos.cpp @@ -1021,17 +1021,22 @@ geos::unique_ptr QgsGeos::linePointDifference( GEOSGeometry *GEOSsplitPoint ) co // we might have a point or a multipoint, depending on number of // intersections between the geometry and the split geometry - std::unique_ptr< QgsAbstractGeometry > splitGeom( fromGeos( GEOSsplitPoint ) ); - std::unique_ptr< QgsMultiPoint > splitPoints( qgsgeometry_cast( splitGeom->clone() ) ); - if ( !splitPoints ) + std::unique_ptr< QgsMultiPoint > splitPoints; { - QgsPoint *splitPoint = qgsgeometry_cast( splitGeom->clone() ); - if ( !splitPoint ) + std::unique_ptr< QgsAbstractGeometry > splitGeom( fromGeos( GEOSsplitPoint ) ); + + if ( qgsgeometry_cast( splitGeom.get() ) ) { - return nullptr; + splitPoints.reset( qgsgeometry_cast( splitGeom.release() ) ); + } + else if ( qgsgeometry_cast( splitGeom.get() ) ) + { + splitPoints = std::make_unique< QgsMultiPoint >(); + if ( QgsPoint *point = qgsgeometry_cast( splitGeom.get() ) ) + { + splitPoints->addGeometry( qgsgeometry_cast( splitGeom.release() ) ); + } } - splitPoints.reset( new QgsMultiPoint() ); - splitPoints->addGeometry( splitPoint ); } QgsMultiCurve lines;