%%
-<vals_ok>[-|\+]?[0-9]+(\.)?([0-9]+)?([Ee](\+|-)?[0-9]+)? { lwg_parse_yylval.value=atof(lwg_parse_yytext); UPDATE_YYLLOC(); return VALUE; }
+<vals_ok>[-|\+]?[0-9]+(\.[0-9]+)?([Ee](\+|-)?[0-9]+)? { lwg_parse_yylval.value=atof(lwg_parse_yytext); UPDATE_YYLLOC(); return VALUE; }
<vals_ok>[-|\+]?(\.[0-9]+)([Ee](\+|-)?[0-9]+)? { lwg_parse_yylval.value=atof(lwg_parse_yytext); UPDATE_YYLLOC(); return VALUE; }
<INITIAL>00[0-9A-F]* { lwg_parse_yylval.wkb=lwg_parse_yytext; return WKB;}
/*
* Double pattern
- * [-|\+]?[0-9]+(\.[0-9]+)?([Ee](\+|-)?[0-9]+)
- *
+ * [-|\+]?[0-9]+(\.)?([0-9]+)?([Ee](\+|-)?[0-9]+)?
* We could also meet spaces before or after
* this pattern upon parameters
*/
} else if (isspace(*p)) {
if (!space_after) lwerror("invalid GML representation");
if (st == DIG || st == DIG_DEC || st == DIG_EXP)st = END;
+ else if (st == NEED_DIG_DEC) st = END;
else if (st == END);
else lwerror("invalid GML representation");
} else lwerror("invalid GML representation");
}
- if (st != DIG && st != DIG_DEC && st != DIG_EXP && st != END)
+ if (st != DIG && st != NEED_DIG_DEC && st != DIG_DEC && st != DIG_EXP && st != END)
lwerror("invalid GML representation");
return atof(d);
SELECT 'double_6', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1.2</gml:pos></gml:Point>'));
SELECT 'double_7', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1.23</gml:pos></gml:Point>'));
--- ERROR: no digit after dot
+-- no digit after dot
SELECT 'double_8', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1.</gml:pos></gml:Point>'));
-- ERROR: several dots
ERROR: invalid GML representation
double_6|POINT(1 1.2)
double_7|POINT(1 1.23)
-ERROR: invalid GML representation
+double_8|POINT(1 1)
ERROR: invalid GML representation
ERROR: invalid GML representation
ERROR: invalid GML representation