xmlChar *kml_coord;
bool found;
POINTARRAY *dpa;
+ int seen_kml_dims = 0;
int kml_dims;
char *p, *q;
POINT4D pt;
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;
}
-- ERROR: Junk
SELECT 'double_31', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,$0%@#$^%#</kml:coordinates></kml:Point>'));
+-- ERROR: mixed coordinate dimension
+SELECT 'mixed_dims_1', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,2 1,2,3</kml:coordinates></kml:Point>'));
+SELECT 'mixed_dims_2', ST_AsEWKT(ST_GeomFromKML('<kml:Point><kml:coordinates>1,2,3 1,2</kml:coordinates></kml:Point>'));
+
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