Skip to content

Commit 655862f

Browse files
authoredJul 30, 2021
Merge pull request #44449 from nyalldawson/backport_44392
Fix leaked GDAL dataset handle when deleting layers (3.20)
2 parents 90b8636 + 840485f commit 655862f

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed
 

‎src/core/providers/ogr/qgsogrprovider.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7580,16 +7580,16 @@ bool QgsOgrProviderUtils::deleteLayer( const QString &uri, QString &errCause )
75807580
openOptions );
75817581

75827582

7583-
GDALDatasetH hDS = GDALOpenEx( filePath.toUtf8().constData(), GDAL_OF_RASTER | GDAL_OF_VECTOR | GDAL_OF_UPDATE, nullptr, nullptr, nullptr );
7583+
gdal::dataset_unique_ptr hDS( GDALOpenEx( filePath.toUtf8().constData(), GDAL_OF_RASTER | GDAL_OF_VECTOR | GDAL_OF_UPDATE, nullptr, nullptr, nullptr ) );
75847584
if ( hDS && ( ! layerName.isEmpty() || layerIndex != -1 ) )
75857585
{
75867586
// If we have got a name we convert it into an index
75877587
if ( ! layerName.isEmpty() )
75887588
{
75897589
layerIndex = -1;
7590-
for ( int i = 0; i < GDALDatasetGetLayerCount( hDS ); i++ )
7590+
for ( int i = 0; i < GDALDatasetGetLayerCount( hDS.get() ); i++ )
75917591
{
7592-
OGRLayerH hL = GDALDatasetGetLayer( hDS, i );
7592+
OGRLayerH hL = GDALDatasetGetLayer( hDS.get(), i );
75937593
if ( layerName == QString::fromUtf8( OGR_L_GetName( hL ) ) )
75947594
{
75957595
layerIndex = i;
@@ -7600,7 +7600,7 @@ bool QgsOgrProviderUtils::deleteLayer( const QString &uri, QString &errCause )
76007600
// Do delete!
76017601
if ( layerIndex != -1 )
76027602
{
7603-
OGRErr error = GDALDatasetDeleteLayer( hDS, layerIndex );
7603+
OGRErr error = GDALDatasetDeleteLayer( hDS.get(), layerIndex );
76047604
switch ( error )
76057605
{
76067606
case OGRERR_NOT_ENOUGH_DATA:
@@ -7630,7 +7630,6 @@ bool QgsOgrProviderUtils::deleteLayer( const QString &uri, QString &errCause )
76307630
case OGRERR_NON_EXISTING_FEATURE:
76317631
errCause = QObject::tr( "Non existing feature" );
76327632
break;
7633-
default:
76347633
case OGRERR_NONE:
76357634
errCause = QObject::tr( "Success" );
76367635
break;

0 commit comments

Comments
 (0)
Please sign in to comment.