From: Sandro Santilli Date: Mon, 1 Jul 2013 09:17:23 +0000 (+0000) Subject: Raise an error when fed KML with mixed coordinate dimension X-Git-Tag: 2.2.0rc1~1469 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3bb9dd858cb2c0d1c4740bfdeb6030f49e6574c7;p=postgis Raise an error when fed KML with mixed coordinate dimension See #2372 git-svn-id: http://svn.osgeo.org/postgis/trunk@11603 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/postgis/lwgeom_in_kml.c b/postgis/lwgeom_in_kml.c index d853ae8a9..3180c2d4d 100644 --- a/postgis/lwgeom_in_kml.c +++ b/postgis/lwgeom_in_kml.c @@ -269,6 +269,7 @@ static POINTARRAY* parse_kml_coordinates(xmlNodePtr xnode, bool *hasz) xmlChar *kml_coord; bool found; POINTARRAY *dpa; + int seen_kml_dims = 0; int kml_dims; char *p, *q; POINT4D pt; @@ -328,7 +329,11 @@ static POINTARRAY* parse_kml_coordinates(xmlNodePtr xnode, bool *hasz) while (*q && isspace(*q)) ++q; if ( isdigit(*q) || *q == '+' || *q == '-' || *q == '.' || ! *q ) { if ( kml_dims < 2 ) lwerror("invalid KML representation"); /* (not enough ordinates)"); */ - if ( kml_dims < 3 ) *hasz = false; + else if ( kml_dims < 3 ) *hasz = false; + if ( ! seen_kml_dims ) seen_kml_dims = kml_dims; + else if ( seen_kml_dims != kml_dims ) { + lwerror("invalid KML representation: mixed coordinates dimension"); + } ptarray_append_point(dpa, &pt, LW_FALSE); kml_dims = 0; } diff --git a/regress/in_kml.sql b/regress/in_kml.sql index c02e76088..3ac14e0c3 100644 --- a/regress/in_kml.sql +++ b/regress/in_kml.sql @@ -351,6 +351,10 @@ SELECT 'double_30', ST_AsEWKT(ST_GeomFromKML('1,-1.2 -- ERROR: Junk SELECT 'double_31', ST_AsEWKT(ST_GeomFromKML('1,$0%@#$^%#')); +-- ERROR: mixed coordinate dimension +SELECT 'mixed_dims_1', ST_AsEWKT(ST_GeomFromKML('1,2 1,2,3')); +SELECT 'mixed_dims_2', ST_AsEWKT(ST_GeomFromKML('1,2,3 1,2')); + diff --git a/regress/in_kml_expected b/regress/in_kml_expected index 063b9ea6d..0203db685 100644 --- a/regress/in_kml_expected +++ b/regress/in_kml_expected @@ -98,3 +98,5 @@ ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation ERROR: invalid KML representation +ERROR: invalid KML representation: mixed coordinates dimension +ERROR: invalid KML representation: mixed coordinates dimension