Skip to content

Commit 304cc4b

Browse files
committed
Fix memory leaks in raster writer
1 parent 4af7e69 commit 304cc4b

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

src/core/raster/qgsrasterfilewriter.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,10 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( QgsRaster
168168
QCoreApplication::processEvents( QEventLoop::AllEvents, 1000 );
169169
if ( p->wasCanceled() )
170170
{
171+
for ( int i = 0; i < nBands; ++i )
172+
{
173+
CPLFree( dataList[i] );
174+
}
171175
break;
172176
}
173177
}
@@ -182,6 +186,7 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( QgsRaster
182186
for ( int i = 1; i <= nBands; ++i )
183187
{
184188
destProvider->write( dataList[i - 1], i, iterCols, iterRows, 0, 0 );
189+
CPLFree( dataList[i - 1] );
185190
addToVRT( QString::number( fileIndex ), i, iterCols, iterRows, iterLeft, iterTop );
186191
}
187192
}
@@ -191,8 +196,12 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( QgsRaster
191196
for ( int i = 1; i <= nBands; ++i )
192197
{
193198
destProvider->write( dataList[i - 1], i, iterCols, iterRows, iterLeft, iterTop );
199+
CPLFree( dataList[i - 1] );
194200
}
195201
}
202+
203+
204+
196205
++fileIndex;
197206
}
198207
return NoError;
@@ -257,6 +266,7 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeImageRaster( QgsRaste
257266
{
258267
if ( iterCols <= 5 || iterRows <= 5 ) //some wms servers don't like small values
259268
{
269+
CPLFree( data );
260270
continue;
261271
}
262272

@@ -267,6 +277,7 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeImageRaster( QgsRaste
267277
QCoreApplication::processEvents( QEventLoop::AllEvents, 1000 );
268278
if ( p->wasCanceled() )
269279
{
280+
CPLFree( data );
270281
break;
271282
}
272283
}
@@ -287,6 +298,7 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeImageRaster( QgsRaste
287298
memcpy(( char* )blueData + i, &blue, 1 );
288299
memcpy(( char* )alphaData + i, &alpha, 1 );
289300
}
301+
CPLFree( data );
290302

291303
//create output file
292304
if ( mTiledMode )
@@ -317,7 +329,7 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeImageRaster( QgsRaste
317329
++fileIndex;
318330
}
319331
delete destProvider;
320-
CPLFree( data ); CPLFree( redData ); CPLFree( greenData ); CPLFree( blueData ); CPLFree( alphaData );
332+
CPLFree( redData ); CPLFree( greenData ); CPLFree( blueData ); CPLFree( alphaData );
321333

322334
if ( p )
323335
{

0 commit comments

Comments
 (0)