diff --git a/src/core/providers/ogr/qgsogrproviderconnection.cpp b/src/core/providers/ogr/qgsogrproviderconnection.cpp index 311c38752f8..036b55a62c6 100644 --- a/src/core/providers/ogr/qgsogrproviderconnection.cpp +++ b/src/core/providers/ogr/qgsogrproviderconnection.cpp @@ -281,13 +281,15 @@ void QgsOgrProviderConnection::addFieldDomain( const QgsFieldDomain &domain, con { if ( OGRFieldDomainH ogrDomain = QgsOgrUtils::convertFieldDomain( &domain ) ) { - char **failureReason = nullptr; - if ( !GDALDatasetAddFieldDomain( hDS.get(), ogrDomain, failureReason ) ) + char *failureReason = nullptr; + if ( !GDALDatasetAddFieldDomain( hDS.get(), ogrDomain, &failureReason ) ) { OGR_FldDomain_Destroy( ogrDomain ); - QString error( failureReason ? *failureReason : nullptr ); + QString error( failureReason ); + CPLFree( failureReason ); throw QgsProviderConnectionException( QObject::tr( "Could not create field domain: %1" ).arg( error ) ); } + CPLFree( failureReason ); OGR_FldDomain_Destroy( ogrDomain ); } else diff --git a/tests/src/python/test_qgsproviderconnection_ogr_gpkg.py b/tests/src/python/test_qgsproviderconnection_ogr_gpkg.py index 57a992e86ba..66b1d45798d 100644 --- a/tests/src/python/test_qgsproviderconnection_ogr_gpkg.py +++ b/tests/src/python/test_qgsproviderconnection_ogr_gpkg.py @@ -223,6 +223,11 @@ class TestPyQgsProviderConnectionGpkg(unittest.TestCase, TestPyQgsProviderConnec self.assertEqual(res.minimum(), 5) self.assertEqual(res.maximum(), 15) + # try adding another with a duplicate name, should fail + with self.assertRaises(QgsProviderConnectionException) as e: + conn.addFieldDomain(domain, '') + self.assertEqual(str(e.exception), 'Could not create field domain: A domain of identical name already exists') + domain = QgsGlobFieldDomain('my new glob domain', 'my new glob desc', QVariant.String, '*aaabc*') conn.addFieldDomain(domain, '')