Skip to content

Commit 4d3c7e5

Browse files
committed
Geopackage: fix crash when deleting raster layers
1 parent f867b65 commit 4d3c7e5

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

src/providers/ogr/qgsgeopackagedataitems.cpp

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ bool QgsGeoPackageRasterLayerItem::executeDeleteLayer( QString &errCause )
577577
else
578578
{
579579
// Remove table
580-
char *errmsg = NULL;
580+
char *errmsg = nullptr;
581581
char *sql = sqlite3_mprintf(
582582
"DROP table %w;"
583583
"DELETE FROM gpkg_contents WHERE table_name = '%q';"
@@ -596,20 +596,21 @@ bool QgsGeoPackageRasterLayerItem::executeDeleteLayer( QString &errCause )
596596
);
597597
sqlite3_free( sql );
598598
// Remove from optional tables, may silently fail
599-
for ( const auto tableName : QStringList()
600-
<< QStringLiteral( "gpkg_extensions" )
601-
<< QStringLiteral( "gpkg_metadata_reference" ) )
599+
QStringList optionalTables;
600+
optionalTables << QStringLiteral( "gpkg_extensions" )
601+
<< QStringLiteral( "gpkg_metadata_reference" );
602+
for ( const auto tableName : optionalTables )
602603
{
603604
char *sql = sqlite3_mprintf( "DELETE FROM table %w WHERE table_name = '%q",
604605
tableName.toUtf8().constData(),
605606
layerName.toUtf8().constData() );
606-
status = sqlite3_exec(
607-
handle, /* An open database */
608-
sql, /* SQL to be evaluated */
609-
NULL, /* Callback function */
610-
NULL, /* 1st argument to callback */
611-
NULL /* Error msg written here */
612-
);
607+
sqlite3_exec(
608+
handle, /* An open database */
609+
sql, /* SQL to be evaluated */
610+
NULL, /* Callback function */
611+
NULL, /* 1st argument to callback */
612+
NULL /* Error msg written here */
613+
);
613614
sqlite3_free( sql );
614615
}
615616
if ( status == SQLITE_OK )
@@ -618,9 +619,9 @@ bool QgsGeoPackageRasterLayerItem::executeDeleteLayer( QString &errCause )
618619
}
619620
else
620621
{
621-
errCause = tr( "There was an error deleting the layer: %1" ).arg( errmsg );
622-
sqlite3_free( errmsg );
622+
errCause = tr( "There was an error deleting the layer: %1" ).arg( QString::fromUtf8( errmsg ) );
623623
}
624+
sqlite3_free( errmsg );
624625
}
625626
sqlite3_close( handle );
626627
}

0 commit comments

Comments
 (0)