diff --git a/autotest/ogr/ogr_dxf.py b/autotest/ogr/ogr_dxf.py index 16cd74c362f8..01803bb9a6b0 100644 --- a/autotest/ogr/ogr_dxf.py +++ b/autotest/ogr/ogr_dxf.py @@ -423,7 +423,7 @@ def test_ogr_dxf_11(): ############################################################################### -# Write a simple file with a polygon and a line, and read back. +# Write a simple file with a few geometries of different types, and read back. def test_ogr_dxf_12(tmp_path): @@ -467,6 +467,14 @@ def test_ogr_dxf_12(tmp_path): lyr.CreateFeature(dst_feat) dst_feat = None + # Test multipoint + dst_feat = ogr.Feature(feature_def=lyr.GetLayerDefn()) + dst_feat.SetGeometryDirectly( + ogr.CreateGeometryFromWkt("MULTIPOINT((10 40),(40 30))") + ) + lyr.CreateFeature(dst_feat) + dst_feat = None + lyr = None ds = None @@ -514,9 +522,24 @@ def test_ogr_dxf_12(tmp_path): ), feat.GetGeometryRef().ExportToWkt() feat = None + # Check 5th feature (1st multipoint part) + feat = lyr.GetNextFeature() + + ogrtest.check_feature_geometry( + feat, "POINT(10 40)" + ), feat.GetGeometryRef().ExportToWkt() + feat = None + + # Check 6th feature (2nd multipoint part) + feat = lyr.GetNextFeature() + + ogrtest.check_feature_geometry( + feat, "POINT(40 30)" + ), feat.GetGeometryRef().ExportToWkt() + feat = None + lyr = None ds = None - ds = None ############################################################################### diff --git a/ogr/ogrsf_frmts/dxf/ogrdxfwriterlayer.cpp b/ogr/ogrsf_frmts/dxf/ogrdxfwriterlayer.cpp index 923ac2e1907e..93dba9104674 100644 --- a/ogr/ogrsf_frmts/dxf/ogrdxfwriterlayer.cpp +++ b/ogr/ogrsf_frmts/dxf/ogrdxfwriterlayer.cpp @@ -1278,7 +1278,7 @@ OGRErr OGRDXFWriterLayer::ICreateFeature(OGRFeature *poFeature) } // Explode geometry collections into multiple entities. - else if (eGType == wkbGeometryCollection) + else if (eGType == wkbGeometryCollection || eGType == wkbMultiPoint) { OGRGeometryCollection *poGC = poFeature->StealGeometry()->toGeometryCollection(); diff --git a/ogr/ogrsf_frmts/sqlite/ogrsqlitedatasource.cpp b/ogr/ogrsf_frmts/sqlite/ogrsqlitedatasource.cpp index 959d65baad92..05203909798e 100644 --- a/ogr/ogrsf_frmts/sqlite/ogrsqlitedatasource.cpp +++ b/ogr/ogrsf_frmts/sqlite/ogrsqlitedatasource.cpp @@ -4311,7 +4311,10 @@ OGRErr OGRSQLiteBaseDataSource::ReleaseSavepoint(const std::string &osName) { m_aosSavepoints.pop_back(); } - m_aosSavepoints.pop_back(); + if (!m_aosSavepoints.empty()) // should always be true + { + m_aosSavepoints.pop_back(); + } } } return eErr;