]> granicus.if.org Git - postgis/commitdiff
Allow a double to not have digit after dot (related to #175). Update unit test case
authorOlivier Courtin <olivier.courtin@camptocamp.com>
Wed, 4 Nov 2009 21:10:40 +0000 (21:10 +0000)
committerOlivier Courtin <olivier.courtin@camptocamp.com>
Wed, 4 Nov 2009 21:10:40 +0000 (21:10 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@4741 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/wktparse.lex
postgis/lwgeom_in_gml.c
regress/in_gml.sql
regress/in_gml_expected

index ffc21991a600981043d334412bdf3063ad3cccc9..22ea82ed9bbc5507becb1f269179da827d23201b 100644 (file)
@@ -28,7 +28,7 @@ static YY_BUFFER_STATE buf_state;
 
 %%
 
-<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;}
index e4efb51e9c8edec1b375a9feaa7586a511b6482a..8a6d4f3dcd876ea4c1d0451c4e3f4e68f775ae74 100644 (file)
@@ -463,8 +463,7 @@ static double parse_gml_double(char *d, bool space_before, bool space_after)
 
        /*
         * 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
         */
@@ -491,12 +490,13 @@ static double parse_gml_double(char *d, bool space_before, bool space_after)
                } 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);
index ea0b0f9cdc9ee7f01c720581f914bef10e1d5965..58dde924b71d544ead1895a3747ccbcd8a1245c3 100644 (file)
@@ -826,7 +826,7 @@ SELECT 'double_5', ST_AsEWKT(ST_GeomFromGML('<gml:Point><gml:pos>1 1-1</gml:pos>
 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
index aa7841cfdbf38933e9fbf26f09dd8a1e8b57283b..4bad3fd87fb6a2bcbf2b44b83e440a0a566af1b0 100644 (file)
@@ -258,7 +258,7 @@ ERROR:  invalid GML representation
 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