Skip to content

Commit cd7592d

Browse files
committedAug 10, 2015
Fix memory leaks in geometry expression functions
1 parent 1a91ae8 commit cd7592d

File tree

1 file changed

+30
-38
lines changed

1 file changed

+30
-38
lines changed
 

‎src/core/qgsexpression.cpp

Lines changed: 30 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1124,20 +1124,17 @@ static QVariant fcnGeomFromWKT( const QVariantList& values, const QgsFeature*, Q
11241124
{
11251125
QString wkt = getStringValue( values.at( 0 ), parent );
11261126
QgsGeometry* geom = QgsGeometry::fromWkt( wkt );
1127-
if ( geom )
1128-
return QVariant::fromValue( *geom );
1129-
else
1130-
return QVariant();
1127+
QVariant result = geom ? QVariant::fromValue( *geom ) : QVariant();
1128+
delete geom;
1129+
return result;
11311130
}
11321131
static QVariant fcnGeomFromGML( const QVariantList& values, const QgsFeature*, QgsExpression* parent )
11331132
{
11341133
QString gml = getStringValue( values.at( 0 ), parent );
11351134
QgsGeometry* geom = QgsOgcUtils::geometryFromGML( gml );
1136-
1137-
if ( geom )
1138-
return QVariant::fromValue( *geom );
1139-
else
1140-
return QVariant();
1135+
QVariant result = geom ? QVariant::fromValue( *geom ) : QVariant();
1136+
delete geom;
1137+
return result;
11411138
}
11421139

11431140
static QVariant fcnGeomArea( const QVariantList&, const QgsFeature* f, QgsExpression* parent )
@@ -1163,14 +1160,9 @@ static QVariant fcnBounds( const QVariantList& values, const QgsFeature*, QgsExp
11631160
{
11641161
QgsGeometry geom = getGeometry( values.at( 0 ), parent );
11651162
QgsGeometry* geomBounds = QgsGeometry::fromRect( geom.boundingBox() );
1166-
if ( geomBounds )
1167-
{
1168-
return QVariant::fromValue( *geomBounds );
1169-
}
1170-
else
1171-
{
1172-
return QVariant();
1173-
}
1163+
QVariant result = geomBounds ? QVariant::fromValue( *geomBounds ) : QVariant();
1164+
delete geomBounds;
1165+
return result;
11741166
}
11751167

11761168
static QVariant fcnBoundsWidth( const QVariantList& values, const QgsFeature*, QgsExpression* parent )
@@ -1269,34 +1261,34 @@ static QVariant fcnBuffer( const QVariantList& values, const QgsFeature*, QgsExp
12691261
seg = getIntValue( values.at( 2 ), parent );
12701262

12711263
QgsGeometry* geom = fGeom.buffer( dist, seg );
1272-
if ( geom )
1273-
return QVariant::fromValue( *geom );
1274-
return QVariant();
1264+
QVariant result = geom ? QVariant::fromValue( *geom ) : QVariant();
1265+
delete geom;
1266+
return result;
12751267
}
12761268
static QVariant fcnCentroid( const QVariantList& values, const QgsFeature*, QgsExpression* parent )
12771269
{
12781270
QgsGeometry fGeom = getGeometry( values.at( 0 ), parent );
12791271
QgsGeometry* geom = fGeom.centroid();
1280-
if ( geom )
1281-
return QVariant::fromValue( *geom );
1282-
return QVariant();
1272+
QVariant result = geom ? QVariant::fromValue( *geom ) : QVariant();
1273+
delete geom;
1274+
return result;
12831275
}
12841276
static QVariant fcnConvexHull( const QVariantList& values, const QgsFeature*, QgsExpression* parent )
12851277
{
12861278
QgsGeometry fGeom = getGeometry( values.at( 0 ), parent );
12871279
QgsGeometry* geom = fGeom.convexHull();
1288-
if ( geom )
1289-
return QVariant::fromValue( *geom );
1290-
return QVariant();
1280+
QVariant result = geom ? QVariant::fromValue( *geom ) : QVariant();
1281+
delete geom;
1282+
return result;
12911283
}
12921284
static QVariant fcnDifference( const QVariantList& values, const QgsFeature*, QgsExpression* parent )
12931285
{
12941286
QgsGeometry fGeom = getGeometry( values.at( 0 ), parent );
12951287
QgsGeometry sGeom = getGeometry( values.at( 1 ), parent );
12961288
QgsGeometry* geom = fGeom.difference( &sGeom );
1297-
if ( geom )
1298-
return QVariant::fromValue( *geom );
1299-
return QVariant();
1289+
QVariant result = geom ? QVariant::fromValue( *geom ) : QVariant();
1290+
delete geom;
1291+
return result;
13001292
}
13011293
static QVariant fcnDistance( const QVariantList& values, const QgsFeature*, QgsExpression* parent )
13021294
{
@@ -1309,27 +1301,27 @@ static QVariant fcnIntersection( const QVariantList& values, const QgsFeature*,
13091301
QgsGeometry fGeom = getGeometry( values.at( 0 ), parent );
13101302
QgsGeometry sGeom = getGeometry( values.at( 1 ), parent );
13111303
QgsGeometry* geom = fGeom.intersection( &sGeom );
1312-
if ( geom )
1313-
return QVariant::fromValue( *geom );
1314-
return QVariant();
1304+
QVariant result = geom ? QVariant::fromValue( *geom ) : QVariant();
1305+
delete geom;
1306+
return result;
13151307
}
13161308
static QVariant fcnSymDifference( const QVariantList& values, const QgsFeature*, QgsExpression* parent )
13171309
{
13181310
QgsGeometry fGeom = getGeometry( values.at( 0 ), parent );
13191311
QgsGeometry sGeom = getGeometry( values.at( 1 ), parent );
13201312
QgsGeometry* geom = fGeom.symDifference( &sGeom );
1321-
if ( geom )
1322-
return QVariant::fromValue( *geom );
1323-
return QVariant();
1313+
QVariant result = geom ? QVariant::fromValue( *geom ) : QVariant();
1314+
delete geom;
1315+
return result;
13241316
}
13251317
static QVariant fcnCombine( const QVariantList& values, const QgsFeature*, QgsExpression* parent )
13261318
{
13271319
QgsGeometry fGeom = getGeometry( values.at( 0 ), parent );
13281320
QgsGeometry sGeom = getGeometry( values.at( 1 ), parent );
13291321
QgsGeometry* geom = fGeom.combine( &sGeom );
1330-
if ( geom )
1331-
return QVariant::fromValue( *geom );
1332-
return QVariant();
1322+
QVariant result = geom ? QVariant::fromValue( *geom ) : QVariant();
1323+
delete geom;
1324+
return result;
13331325
}
13341326
static QVariant fcnGeomToWKT( const QVariantList& values, const QgsFeature*, QgsExpression* parent )
13351327
{

0 commit comments

Comments
 (0)
Please sign in to comment.