Skip to content

Commit 73b9569

Browse files
committedFeb 5, 2015
Fix a bunch of memory leaks
...thanks Coverity, thoverity.
1 parent f6d6c69 commit 73b9569

File tree

14 files changed

+71
-22
lines changed

14 files changed

+71
-22
lines changed
 

‎src/analysis/vector/qgstransectsample.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,7 @@ QgsGeometry* QgsTransectSample::clipBufferLine( QgsGeometry* stratumGeom, QgsGeo
595595
bufferLine = QgsGeometry::fromMultiPolyline( mpl );
596596
}
597597
bufferLineClipped = bufferLine->intersection( stratumGeom );
598+
delete bufferLine;
598599

599600
if ( bufferLineClipped && bufferLineClipped->type() == QGis::Line )
600601
{
@@ -619,11 +620,13 @@ QgsGeometry* QgsTransectSample::clipBufferLine( QgsGeometry* stratumGeom, QgsGeo
619620

620621
if ( bufferLineClippedIntersectsStratum )
621622
{
623+
delete clipBaselineBuffer;
622624
return bufferLineClipped;
623625
}
624626
}
625627

626-
delete bufferLineClipped; delete clipBaselineBuffer; delete bufferLine;
628+
delete bufferLineClipped;
629+
delete clipBaselineBuffer;
627630
currentBufferDist /= 2;
628631
}
629632

‎src/core/qgsgeometry.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4661,7 +4661,9 @@ GEOSGeometry* QgsGeometry::linePointDifference( GEOSGeometry* GEOSsplitPoint )
46614661
else
46624662
return 0;
46634663

4664-
QgsPoint splitPoint = fromGeosGeom( GEOSsplitPoint )->asPoint();
4664+
QgsGeometry* geosPoint = fromGeosGeom( GEOSsplitPoint );
4665+
QgsPoint splitPoint = geosPoint->asPoint();
4666+
delete geosPoint;
46654667

46664668
QgsMultiPolyline lines;
46674669
QgsPolyline line;
@@ -4689,9 +4691,9 @@ GEOSGeometry* QgsGeometry::linePointDifference( GEOSGeometry* GEOSsplitPoint )
46894691
}
46904692
QgsGeometry* splitLines = fromMultiPolyline( lines );
46914693
GEOSGeometry* splitGeom = GEOSGeom_clone_r( geosinit.ctxt, splitLines->asGeos() );
4694+
delete splitLines;
46924695

46934696
return splitGeom;
4694-
46954697
}
46964698

46974699
int QgsGeometry::splitLinearGeometry( GEOSGeometry *splitLine, QList<QgsGeometry*>& newGeometries )

‎src/core/qgsgml.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,7 @@ void QgsGml::endElement( const XML_Char* el )
492492
}
493493
else
494494
{
495+
delete[] wkb;
495496
QgsDebugMsg( "no wkb fragments" );
496497
}
497498
}

‎src/core/qgsogcutils.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1653,6 +1653,7 @@ QgsExpression::NodeFunction* QgsOgcUtils::nodeSpatialOperatorFromOgcFilter( QDom
16531653
else
16541654
{
16551655
errorMessage = QString( "No OGC Geometry found" );
1656+
delete gml2Args;
16561657
return NULL;
16571658
}
16581659

‎src/core/raster/qgscubicrasterresampler.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,12 +263,15 @@ void QgsCubicRasterResampler::resample( const QImage& srcImage, QImage& dstImage
263263
delete[] redMatrix;
264264
delete[] greenMatrix;
265265
delete[] blueMatrix;
266+
delete[] alphaMatrix;
266267
delete[] xDerivativeMatrixRed;
267268
delete[] xDerivativeMatrixGreen;
268269
delete[] xDerivativeMatrixBlue;
270+
delete[] xDerivativeMatrixAlpha;
269271
delete[] yDerivativeMatrixRed;
270272
delete[] yDerivativeMatrixGreen;
271273
delete[] yDerivativeMatrixBlue;
274+
delete[] yDerivativeMatrixAlpha;
272275
}
273276

274277
void QgsCubicRasterResampler::xDerivativeMatrix( int nCols, int nRows, double* matrix, const int* colorMatrix )

‎src/core/raster/qgsrasterresamplefilter.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ QgsRasterBlock * QgsRasterResampleFilter::block( int bandNo, QgsRectangle const
167167
if ((( oversampling < 1.0 || qgsDoubleNear( oversampling, 1.0 ) ) && !mZoomedInResampler ) || ( oversampling > 1.0 && !mZoomedOutResampler ) )
168168
{
169169
QgsDebugMsg( "No oversampling." );
170+
delete outputBlock;
170171
return mInput->block( bandNumber, extent, width, height );
171172
}
172173

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2974,6 +2974,7 @@ QgsPointPatternFillSymbolLayer::QgsPointPatternFillSymbolLayer(): QgsImageFillSy
29742974

29752975
QgsPointPatternFillSymbolLayer::~QgsPointPatternFillSymbolLayer()
29762976
{
2977+
delete mMarkerSymbol;
29772978
}
29782979

29792980
void QgsPointPatternFillSymbolLayer::setOutputUnit( QgsSymbolV2::OutputUnit unit )

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,24 @@
1818
#include "qgsvectorfieldsymbollayer.h"
1919
#include "qgsvectorlayer.h"
2020

21-
QgsVectorFieldSymbolLayer::QgsVectorFieldSymbolLayer(): mXAttribute( "" ), mYAttribute( "" ), mDistanceUnit( QgsSymbolV2::MM ), mScale( 1.0 ),
22-
mVectorFieldType( Cartesian ), mAngleOrientation( ClockwiseFromNorth ), mAngleUnits( Degrees ), mXIndex( -1 ), mYIndex( -1 )
21+
QgsVectorFieldSymbolLayer::QgsVectorFieldSymbolLayer()
22+
: mXAttribute( "" )
23+
, mYAttribute( "" )
24+
, mDistanceUnit( QgsSymbolV2::MM )
25+
, mScale( 1.0 )
26+
, mVectorFieldType( Cartesian )
27+
, mAngleOrientation( ClockwiseFromNorth )
28+
, mAngleUnits( Degrees )
29+
, mLineSymbol( 0 )
30+
, mXIndex( -1 )
31+
, mYIndex( -1 )
2332
{
2433
setSubSymbol( new QgsLineSymbolV2() );
2534
}
2635

2736
QgsVectorFieldSymbolLayer::~QgsVectorFieldSymbolLayer()
2837
{
38+
delete mLineSymbol;
2939
}
3040

3141
void QgsVectorFieldSymbolLayer::setOutputUnit( QgsSymbolV2::OutputUnit unit )
@@ -124,6 +134,7 @@ bool QgsVectorFieldSymbolLayer::setSubSymbol( QgsSymbolV2* symbol )
124134
{
125135
if ( symbol->type() == QgsSymbolV2::Line )
126136
{
137+
delete mLineSymbol;
127138
mLineSymbol = static_cast<QgsLineSymbolV2*>( symbol );
128139
return true;
129140
}

‎src/plugins/dxf2shp_converter/dxf2shpconvertergui.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,18 +90,19 @@ void dxf2shpConverterGui::on_buttonBox_accepted()
9090
convtexts );
9191

9292
QgsDebugMsg( QString( "Finished getting insertions. Count: %1" ).arg( insertRetr->countInserts ) );
93+
delete dxf_inserts;
9394

9495
DL_Dxf *dxf_Main = new DL_Dxf();
9596

9697
if ( !dxf_Main->in( inf.toStdString(), parser ) )
9798
{
9899
// if file open failed
100+
delete dxf_Main;
99101
QgsDebugMsg( "Aborting: The input file could not be opened." );
100102
return;
101103
}
102104

103105
delete insertRetr;
104-
delete dxf_inserts;
105106
delete dxf_Main;
106107

107108
parser->print_shpObjects();

‎src/plugins/roadgraph/shortestpathwidget.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,7 @@ QgsGraph* RgShortestPathWidget::getPath( QgsPoint& p1, QgsPoint& p2 )
305305

306306
if ( shortestpathTree->findVertex( p2 ) == -1 )
307307
{
308+
delete shortestpathTree;
308309
QMessageBox::critical( this, tr( "Path not found" ), tr( "Path not found" ) );
309310
return NULL;
310311
}

‎src/plugins/topology/topolTest.cpp

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,7 @@ ErrorList topolTest::checkDanglingLines( double tolerance, QgsVectorLayer* layer
314314
{
315315
if ( canvasExtentPoly->disjoint( conflictGeom ) )
316316
{
317+
delete conflictGeom;
317318
continue;
318319
}
319320
}
@@ -335,7 +336,7 @@ ErrorList topolTest::checkDanglingLines( double tolerance, QgsVectorLayer* layer
335336

336337
}
337338
}
338-
339+
delete canvasExtentPoly;
339340
return errorList;
340341
}
341342

@@ -347,7 +348,7 @@ ErrorList topolTest::checkDuplicates( double tolerance, QgsVectorLayer *layer1,
347348
int i = 0;
348349
ErrorList errorList;
349350

350-
QList<QgsFeatureId>* duplicateIds = new QList<QgsFeatureId>();
351+
QList<QgsFeatureId> duplicateIds;
351352

352353
QgsSpatialIndex* index = mLayerIndexes[layer1->id()];
353354

@@ -363,7 +364,7 @@ ErrorList topolTest::checkDuplicates( double tolerance, QgsVectorLayer *layer1,
363364

364365
QgsFeatureId currentId = it->feature.id();
365366

366-
if ( duplicateIds->contains( currentId ) )
367+
if ( duplicateIds.contains( currentId ) )
367368
{
368369
//is already a duplicate geometry..skip..
369370
continue;
@@ -406,7 +407,7 @@ ErrorList topolTest::checkDuplicates( double tolerance, QgsVectorLayer *layer1,
406407
if ( g1->equals( g2 ) )
407408
{
408409
duplicate = true;
409-
duplicateIds->append( mFeatureMap2[*cit].feature.id() );
410+
duplicateIds.append( mFeatureMap2[*cit].feature.id() );
410411
}
411412

412413
if ( duplicate )
@@ -437,9 +438,8 @@ ErrorList topolTest::checkDuplicates( double tolerance, QgsVectorLayer *layer1,
437438
}
438439

439440
}
440-
441+
delete canvasExtentPoly;
441442
return errorList;
442-
443443
}
444444

445445
ErrorList topolTest::checkOverlaps( double tolerance, QgsVectorLayer *layer1, QgsVectorLayer *layer2, bool isExtent )
@@ -564,7 +564,7 @@ ErrorList topolTest::checkOverlaps( double tolerance, QgsVectorLayer *layer1, Qg
564564
}
565565

566566
}
567-
567+
delete canvasExtentPoly;
568568
}
569569

570570
return errorList;
@@ -678,10 +678,12 @@ ErrorList topolTest::checkGaps( double tolerance, QgsVectorLayer *layer1, QgsVec
678678
QString extentWkt = test.boundingBox().asWktPolygon();
679679
QgsGeometry* extentGeom = QgsGeometry::fromWkt( extentWkt );
680680
QgsGeometry* bufferExtent = extentGeom->buffer( 2, 3 );
681+
delete extentGeom;
681682

682683
//qDebug() << "extent wkt - " << bufferExtent->exportToWkt();
683684

684685
QgsGeometry* diffGeoms = bufferExtent->difference( &test );
686+
delete bufferExtent;
685687
if ( !diffGeoms )
686688
{
687689
qDebug() << "difference result 0-";
@@ -718,6 +720,7 @@ ErrorList topolTest::checkGaps( double tolerance, QgsVectorLayer *layer1, QgsVec
718720
errorList << err;
719721
}
720722

723+
delete canvasExtentPoly;
721724
return errorList;
722725
}
723726

@@ -810,6 +813,7 @@ ErrorList topolTest::checkPseudos( double tolerance, QgsVectorLayer *layer1, Qgs
810813
{
811814
if ( canvasExtentPoly->disjoint( conflictGeom ) )
812815
{
816+
delete conflictGeom;
813817
continue;
814818
}
815819
}
@@ -831,7 +835,7 @@ ErrorList topolTest::checkPseudos( double tolerance, QgsVectorLayer *layer1, Qgs
831835

832836
}
833837
}
834-
838+
delete canvasExtentPoly;
835839
return errorList;
836840
}
837841

@@ -962,7 +966,7 @@ ErrorList topolTest::checkPointCoveredBySegment( double tolerance, QgsVectorLaye
962966
errorList << err;
963967
}
964968
}
965-
969+
delete canvasExtentPoly;
966970
return errorList;
967971
}
968972

@@ -1205,6 +1209,7 @@ ErrorList topolTest::checkOverlapWithLayer( double tolerance, QgsVectorLayer* la
12051209
}
12061210
}
12071211
}
1212+
delete canvasExtentPoly;
12081213
return errorList;
12091214
}
12101215

@@ -1257,10 +1262,12 @@ ErrorList topolTest::checkPointCoveredByLineEnds( double tolerance, QgsVectorLay
12571262
}
12581263
QgsGeometry* startPoint = QgsGeometry::fromPoint( g2->asPolyline().first() );
12591264
QgsGeometry* endPoint = QgsGeometry::fromPoint( g2->asPolyline().last() );
1265+
touched = g1->intersects( startPoint ) || g1->intersects( endPoint );
1266+
delete startPoint;
1267+
delete endPoint;
12601268

1261-
if ( g1->intersects( startPoint ) || g1->intersects( endPoint ) )
1269+
if ( touched )
12621270
{
1263-
touched = true;
12641271
break;
12651272
}
12661273
}
@@ -1283,8 +1290,8 @@ ErrorList topolTest::checkPointCoveredByLineEnds( double tolerance, QgsVectorLay
12831290
errorList << err;
12841291
}
12851292
}
1293+
delete canvasExtentPoly;
12861294
return errorList;
1287-
12881295
}
12891296

12901297
ErrorList topolTest::checkyLineEndsCoveredByPoints( double tolerance, QgsVectorLayer *layer1, QgsVectorLayer *layer2, bool isExtent )
@@ -1359,6 +1366,9 @@ ErrorList topolTest::checkyLineEndsCoveredByPoints( double tolerance, QgsVectorL
13591366
}
13601367

13611368
}
1369+
delete startPoint;
1370+
delete endPoint;
1371+
13621372
if ( !touched )
13631373
{
13641374
QgsGeometry* conflictGeom = new QgsGeometry( *g1 );
@@ -1383,8 +1393,8 @@ ErrorList topolTest::checkyLineEndsCoveredByPoints( double tolerance, QgsVectorL
13831393
errorList << err;
13841394
}
13851395
}
1396+
delete canvasExtentPoly;
13861397
return errorList;
1387-
13881398
}
13891399

13901400
ErrorList topolTest::checkPointInPolygon( double tolerance, QgsVectorLayer *layer1, QgsVectorLayer *layer2, bool isExtent )
@@ -1457,8 +1467,9 @@ ErrorList topolTest::checkPointInPolygon( double tolerance, QgsVectorLayer *laye
14571467
errorList << err;
14581468
}
14591469
}
1460-
return errorList;
14611470

1471+
delete canvasExtentPoly;
1472+
return errorList;
14621473
}
14631474

14641475

‎src/providers/gpx/qgsgpxfeatureiterator.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,10 @@ bool QgsGPXFeatureIterator::readRoute( const QgsRoute& rte, QgsFeature& feature
211211
const QgsRectangle& rect = mRequest.filterRect();
212212
if (( rte.xMax < rect.xMinimum() ) || ( rte.xMin > rect.xMaximum() ) ||
213213
( rte.yMax < rect.yMinimum() ) || ( rte.yMin > rect.yMaximum() ) )
214+
{
215+
delete theGeometry;
214216
return false;
217+
}
215218

216219
if ( !theGeometry->intersects( rect ) ) //use geos for precise intersection test
217220
{
@@ -250,7 +253,10 @@ bool QgsGPXFeatureIterator::readTrack( const QgsTrack& trk, QgsFeature& feature
250253
const QgsRectangle& rect = mRequest.filterRect();
251254
if (( trk.xMax < rect.xMinimum() ) || ( trk.xMin > rect.xMaximum() ) ||
252255
( trk.yMax < rect.yMinimum() ) || ( trk.yMin > rect.yMaximum() ) )
256+
{
257+
delete theGeometry;
253258
return false;
259+
}
254260

255261
if ( !theGeometry->intersects( rect ) ) //use geos for precise intersection test
256262
{

‎tests/src/core/testqgsexpression.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -867,8 +867,12 @@ class TestQgsExpression: public QObject
867867
QgsGeometry* tPolygon = QgsGeometry::fromPolygon( polygon );
868868
tPolygon->transform( t );
869869

870-
QTest::newRow( "transform Line" ) << "transform( geomFromWKT('" + QgsGeometry::fromPolyline( line )->exportToWkt() + "'), 'EPSG:4326', 'EPSG:3857' )" << ( void* ) tLine << false;
871-
QTest::newRow( "transform Polygon" ) << "transform( geomFromWKT('" + QgsGeometry::fromPolygon( polygon )->exportToWkt() + "'), 'EPSG:4326', 'EPSG:3857' )" << ( void* ) tPolygon << false;
870+
QgsGeometry* oLine = QgsGeometry::fromPolyline( line );
871+
QgsGeometry* oPolygon = QgsGeometry::fromPolygon( polygon );
872+
QTest::newRow( "transform Line" ) << "transform( geomFromWKT('" + oLine->exportToWkt() + "'), 'EPSG:4326', 'EPSG:3857' )" << ( void* ) tLine << false;
873+
QTest::newRow( "transform Polygon" ) << "transform( geomFromWKT('" + oPolygon->exportToWkt() + "'), 'EPSG:4326', 'EPSG:3857' )" << ( void* ) tPolygon << false;
874+
delete oLine;
875+
delete oPolygon;
872876
}
873877

874878
void eval_geometry_access_transform()

‎tests/src/gui/testqgsrubberband.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ void TestQgsRubberband::testAddSingleMultiGeometries()
9797
mRubberband->addGeometry( geomSinglePart, mPolygonLayer );
9898
mRubberband->addGeometry( geomMultiPart, mPolygonLayer );
9999
QVERIFY( mRubberband->numberOfVertices() == 15 );
100+
101+
delete geomSinglePart;
102+
delete geomMultiPart;
100103
}
101104

102105
QTEST_MAIN( TestQgsRubberband )

0 commit comments

Comments
 (0)
Please sign in to comment.