Skip to content

Commit d6d3ad1

Browse files
committed
Catch exceptions in transform() expression function
(cherry-picked from 2a8333e)
1 parent 60fcddf commit d6d3ad1

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

src/core/qgsexpression.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050
#include "qgsexpressionprivate.h"
5151
#include "qgsexpressionsorter.h"
5252
#include "qgscrscache.h"
53+
#include "qgsmessagelog.h"
54+
#include "qgscsexception.h"
5355

5456
#if QT_VERSION < 0x050000
5557
#include <qtextdocument.h>
@@ -3048,8 +3050,16 @@ static QVariant fcnTransformGeometry( const QVariantList& values, const QgsExpre
30483050
return QVariant::fromValue( fGeom );
30493051

30503052
QgsCoordinateTransform t( s, d );
3051-
if ( fGeom.transform( t ) == 0 )
3052-
return QVariant::fromValue( fGeom );
3053+
try
3054+
{
3055+
if ( fGeom.transform( t ) == 0 )
3056+
return QVariant::fromValue( fGeom );
3057+
}
3058+
catch ( QgsCsException &cse )
3059+
{
3060+
QgsMessageLog::logMessage( QString( "Transform error caught in transform() function: %1" ).arg( cse.what() ) );
3061+
return QVariant();
3062+
}
30533063
return QVariant();
30543064
}
30553065

tests/src/core/testqgsexpression.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -778,6 +778,7 @@ class TestQgsExpression: public QObject
778778
QTest::newRow( "distance_to_vertex null" ) << "distance_to_vertex(NULL, 0)" << false << QVariant();
779779
QTest::newRow( "distance_to_vertex point" ) << "distance_to_vertex(geom_from_wkt('POINT(1 2)'),0)" << false << QVariant( 0.0 );
780780
QTest::newRow( "distance_to_vertex line" ) << "distance_to_vertex(geometry:=geom_from_wkt('LineString(0 0, 10 0, 10 10)'),vertex:=1)" << false << QVariant( 10.0 );
781+
QTest::newRow( "transform invalid" ) << "transform(make_point(0,0),'EPSG:4326','EPSG:28356')" << false << QVariant();
781782

782783
// string functions
783784
QTest::newRow( "lower" ) << "lower('HeLLo')" << false << QVariant( "hello" );

0 commit comments

Comments
 (0)