Skip to content

Commit 0492856

Browse files
committed
MITAB .mif reader: accepts linestring and multilinestring of 1 point (even zero)
Fixes OSGeo#13796
1 parent 3c5c592 commit 0492856

File tree

2 files changed

+60
-2
lines changed

2 files changed

+60
-2
lines changed

autotest/ogr/ogr_mitab.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3078,3 +3078,61 @@ def test_ogr_mitab_creation_illegal_layer_name(tmp_vsimem):
30783078
ds = ogr.GetDriverByName("MapInfo File").CreateDataSource(tmp_vsimem / "out")
30793079
with pytest.raises(Exception, match="Illegal character"):
30803080
ds.CreateLayer("illegal/with/slash")
3081+
3082+
3083+
###############################################################################
3084+
3085+
3086+
@gdaltest.enable_exceptions()
3087+
def test_ogr_mitab_mif_linestring_one_point(tmp_vsimem):
3088+
3089+
with gdal.GetDriverByName("MapInfo File").CreateVector(
3090+
tmp_vsimem / "out.mif"
3091+
) as ds:
3092+
lyr = ds.CreateLayer("out")
3093+
lyr.CreateField(ogr.FieldDefn("ID", ogr.OFTInteger))
3094+
f = ogr.Feature(lyr.GetLayerDefn())
3095+
f.SetGeometry(ogr.CreateGeometryFromWkt("LINESTRING (1 2)"))
3096+
lyr.CreateFeature(f)
3097+
3098+
with gdal.VSIFile(tmp_vsimem / "out.mif", "rb") as f:
3099+
data = f.read()
3100+
3101+
assert (
3102+
data
3103+
== b'Version 300\nCharset "Neutral"\nDelimiter ","\nColumns 1\n ID Integer\nData\n\nPline 1\n1 2\n Pen (1,2,0)\n'
3104+
)
3105+
3106+
with ogr.Open(tmp_vsimem / "out.mif") as ds:
3107+
lyr = ds.GetLayer(0)
3108+
f = lyr.GetNextFeature()
3109+
assert f.GetGeometryRef().ExportToWkt() == "LINESTRING (1 2)"
3110+
3111+
3112+
###############################################################################
3113+
3114+
3115+
@gdaltest.enable_exceptions()
3116+
def test_ogr_mitab_mif_multilinestring_one_point(tmp_vsimem):
3117+
3118+
with gdal.GetDriverByName("MapInfo File").CreateVector(
3119+
tmp_vsimem / "out.mif"
3120+
) as ds:
3121+
lyr = ds.CreateLayer("out")
3122+
lyr.CreateField(ogr.FieldDefn("ID", ogr.OFTInteger))
3123+
f = ogr.Feature(lyr.GetLayerDefn())
3124+
f.SetGeometry(ogr.CreateGeometryFromWkt("MULTILINESTRING ((1 2))"))
3125+
lyr.CreateFeature(f)
3126+
3127+
with gdal.VSIFile(tmp_vsimem / "out.mif", "rb") as f:
3128+
data = f.read()
3129+
3130+
assert (
3131+
data
3132+
== b'Version 300\nCharset "Neutral"\nDelimiter ","\nColumns 1\n ID Integer\nData\n\nPLINE MULTIPLE 1\n 1\n1 2\n Pen (1,2,0)\n'
3133+
)
3134+
3135+
with ogr.Open(tmp_vsimem / "out.mif") as ds:
3136+
lyr = ds.GetLayer(0)
3137+
f = lyr.GetNextFeature()
3138+
assert f.GetGeometryRef().ExportToWkt() == "MULTILINESTRING ((1 2))"

ogr/ogrsf_frmts/mitab/mitab_feature_mif.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,7 @@ int TABPolyline::ReadGeometryFromMIFFile(MIDDATAFile *fp)
706706
}
707707
nNumPoints = atoi(pszLine);
708708
}
709-
if (nNumPoints < 2)
709+
if (nNumPoints < 0)
710710
{
711711
CPLError(CE_Failure, CPLE_FileIO,
712712
"Invalid number of vertices (%d) in PLINE "
@@ -771,7 +771,7 @@ int TABPolyline::ReadGeometryFromMIFFile(MIDDATAFile *fp)
771771
}
772772
else
773773
{
774-
if (nNumPoints < 2)
774+
if (nNumPoints < 0)
775775
{
776776
CPLError(CE_Failure, CPLE_FileIO,
777777
"Invalid number of vertices (%d) in PLINE "

0 commit comments

Comments
 (0)