[SCM] PostGIS branch stable-3.4 updated. 3.4.5-15-ga94af5771

git at osgeo.org git at osgeo.org
Thu Apr 9 14:59:16 PDT 2026


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "PostGIS".

The branch, stable-3.4 has been updated
       via  a94af577180ed222ec217a20c4330713b40936ce (commit)
      from  abdf9e9b713aee3741deb946330dbf2c802692db (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit a94af577180ed222ec217a20c4330713b40936ce
Author: Paul Ramsey <pramsey at cleverelephant.ca>
Date:   Thu Apr 9 14:59:02 2026 -0700

    WKT parser produces incorrect error locations.
    In extreme cases causes occasional crashes.
    References #6061

diff --git a/NEWS b/NEWS
index 7ead93205..dce1d6bfe 100644
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,7 @@ Proj 6.1+ required.
   - GH-850 Use quote_identifier to build tables in pgis_tablefromflatgeobuf (Ariel Mashraki)
   - #6060, fully quality calls to helper functions (Paul Ramsey)
   - #6026, KNN failure in rare IEEE double rounding case (Paul Ramsey)
+  - #6061, WKT parser produces incorrect error locations (Paul Ramsey)
 
 
 PostGIS 3.4.5
diff --git a/liblwgeom/lwin_wkt_lex.c b/liblwgeom/lwin_wkt_lex.c
index f194112fa..0ba962865 100644
--- a/liblwgeom/lwin_wkt_lex.c
+++ b/liblwgeom/lwin_wkt_lex.c
@@ -657,11 +657,11 @@ static const YY_CHAR yy_ec[256] =
        12,    1,    1,    1,   13,    1,   14,   15,   16,   17,
        18,   19,   20,    1,    1,   21,   22,   23,   24,   25,
         1,   26,   27,   28,   29,   30,    1,    1,   31,   32,
-        1,    1,    1,    1,    1,    1,   33,    1,   34,   35,
+        1,    1,    1,    1,    1,    1,   33,    1,    1,    1,
 
-       36,   37,   38,   39,   40,    1,    1,   41,   42,   43,
-       44,   45,    1,   46,   47,   48,   49,   50,    1,    1,
-       51,   52,    1,    1,    1,    1,    1,    1,    1,    1,
+       34,    1,    1,    1,    1,    1,    1,    1,    1,   35,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -678,44 +678,42 @@ static const YY_CHAR yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static const YY_CHAR yy_meta[53] =
+static const YY_CHAR yy_meta[36] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1
+        1,    1,    1,    1,    1
     } ;
 
 static const flex_int16_t yy_base[177] =
     {   0,
-        0,    0,  374,  391,   51,   53,  391,  391,  391,   48,
-      362,   57,  391,   41,   41,   52,   49,   42,   59,   50,
-       49,   56,   55,   76,  361,    0,   96,  391,  106,  109,
-       54,   62,   61,   80,   86,   91,   97,   97,  101,  103,
-      101,  106,  391,  193,  126,  113,  110,  107,  111,  123,
-      132,  121,  149,  127,  122,  143,  391,  147,  132,  138,
-      147,  133,  150,  140,  151,  391,  144,  156,  189,  153,
-      156,  150,  160,  391,  160,  161,  196,  391,  169,  182,
-      192,  186,  193,  184,  187,  186,  188,  186,  196,  195,
-      191,  199,  210,  180,   76,  207,  203,  218,  217,  213,
+        0,    0,  220,  221,   34,   36,  221,  221,  221,   31,
+      209,   40,  221,   24,  196,  201,  196,  186,   33,  190,
+      187,   31,  190,   52,  201,    0,   49,  221,   58,   61,
+      184,  187,  182,  182,  182,  182,  183,   29,   52,  183,
+      179,  181,  221,  190,   73,  185,  173,  167,  168,  173,
+      178,  165,   79,  169,  160,  175,  221,  176,  159,  163,
+      170,  154,  168,  156,  162,  221,  153,   69,  168,  156,
+      157,  148,  151,  221,  147,  146,   71,  221,  149,  156,
+       69,  153,  157,  146,  144,  141,  140,  136,  144,  139,
+      133,  138,  145,  149,  148,  136,  130,  140,  133,  122,
 
-      226,  221,  227,  231,  228,  391,  229,  240,  230,  245,
-      229,  247,  239,  233,  249,  245,  238,  256,  265,  391,
-      256,  257,  269,  266,  273,  276,  267,  267,  278,  284,
-      278,  274,  275,  278,  282,  391,  391,  277,  391,  284,
-      295,  286,  298,  294,  303,  306,  304,  308,  316,  305,
-      312,  320,  391,  321,  319,  391,  391,  314,  323,  391,
-      328,  320,  328,  391,  320,  331,  340,  338,  391,  350,
-      342,  351,  347,  391,  391,  391
+      132,  125,  127,   69,  123,  221,  122,  131,  119,  131,
+      113,  129,  119,  111,  124,  116,  107,  120,  123,  221,
+      107,  105,  115,  108,  113,  114,  102,  100,  109,  113,
+      104,   98,   97,   98,  100,  221,  221,   92,  221,   95,
+      104,   90,   96,   85,   91,   92,   86,   88,   94,   80,
+       85,   91,  221,   90,   85,  221,  221,   78,   85,  221,
+       88,   78,   83,  221,   71,   79,   82,   74,  221,   79,
+       67,   54,   39,  221,  221,  221
     } ;
 
 static const flex_int16_t yy_def[177] =
     {   0,
       176,    1,  176,  176,  176,  176,  176,  176,  176,  176,
       176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,   12,  176,  176,  176,  176,
+      176,  176,  176,  176,  176,   12,   12,  176,  176,  176,
       176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
       176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
       176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
@@ -734,110 +732,68 @@ static const flex_int16_t yy_def[177] =
       176,  176,  176,  176,  176,    0
     } ;
 
-static const flex_int16_t yy_nxt[444] =
+static const flex_int16_t yy_nxt[257] =
     {   0,
         4,    5,    6,    7,    8,    4,    9,   10,   11,   12,
        13,    4,    4,   14,    4,   15,    4,   16,    4,    4,
        17,   18,   19,    4,   20,    4,   21,   22,    4,    4,
-        4,   23,    4,   14,    4,   15,    4,   16,    4,    4,
-       17,   18,   19,    4,   20,    4,   21,   22,    4,    4,
-        4,   23,   24,   24,   24,   24,   25,   26,   28,   28,
-       31,   28,   34,   28,   32,   29,   26,   35,   36,   33,
-       37,   38,   30,   39,   40,   41,   43,   24,   24,   46,
-       31,   42,   34,   47,   32,   95,   48,   35,   36,   33,
-       37,   38,   30,   39,   40,   41,   43,   28,   28,   46,
+        4,   23,    4,    4,   19,   24,   24,   24,   24,   25,
+       26,   28,   28,   31,   28,   38,   28,   32,   29,   26,
+       41,   53,   33,   24,   24,   30,   42,  176,   27,   28,
+       28,  175,   28,   53,   28,   38,   44,   27,   44,  174,
+       45,   54,   55,   30,   28,   28,   94,   28,   95,   28,
+       66,   66,   45,   66,   88,   66,   79,   80,  116,  117,
+      173,   89,  172,  171,  170,   90,  169,   91,  168,  167,
 
-       28,   42,   28,   47,   49,   27,   48,   28,   28,   50,
-       28,   30,   28,   51,   44,   27,   44,   52,   45,   53,
-       54,   55,   56,   57,   49,   58,   59,   28,   28,   50,
-       28,   30,   28,   51,   60,   45,   61,   52,   62,   53,
-       54,   55,   56,   57,   63,   58,   59,   64,   65,   67,
-       66,   66,   68,   66,   60,   66,   61,   69,   62,   70,
-       71,   72,   73,   74,   63,   75,   76,   64,   65,   67,
-       77,   78,   68,   79,   80,   82,   83,   69,   84,   70,
-       71,   72,   73,   74,   85,   75,   76,   86,   87,   95,
-       77,   78,   92,   79,   80,   82,   83,   93,   84,   94,
+      166,  165,  164,  163,  162,  161,  160,  159,  158,  157,
+      156,  155,  154,  153,  152,  151,  150,  149,  148,  147,
+      146,  145,  144,  143,  142,  141,  140,  139,  138,  137,
+      136,  135,  134,  133,  132,  131,  130,  129,  128,  127,
+      126,  125,  124,  123,  122,  121,  120,  119,  118,  115,
+      114,  113,  112,  111,  110,  109,  108,   95,   95,  107,
+      106,  105,  104,  103,  102,  101,  100,   99,   98,   97,
+       96,   93,   92,   87,   86,   85,   84,   83,   82,   81,
+       78,   77,   76,   75,   74,   73,   72,   71,   70,   69,
+       68,   67,   65,   64,   63,   62,   61,   60,   59,   45,
 
-       81,   95,   45,   96,   85,   97,   98,   86,   87,   88,
-       99,  100,   92,  101,  102,  103,   89,   93,  104,  105,
-       90,  106,   91,   96,  107,   97,   98,  108,  109,   88,
-       99,  100,  110,  101,  102,  103,   89,  111,  104,  105,
-       90,  106,   91,  112,  107,  113,  114,  108,  109,  115,
-      116,  117,  110,  118,  119,  120,  121,  111,  122,  123,
-      124,  125,  126,  112,  127,  113,  114,  128,  129,  115,
-      116,  117,  130,  118,  119,  120,  121,  131,  122,  123,
-      124,  125,  126,  132,  127,  133,  134,  128,  129,  135,
-      136,  137,  130,  138,  139,  140,  141,  131,  142,  143,
-
-      144,  145,  146,  132,  147,  133,  134,  148,  149,  135,
-      136,  137,  150,  138,  139,  140,  141,  151,  142,  143,
-      144,  145,  146,  152,  147,  153,  154,  148,  149,  155,
-      156,  157,  150,  158,  159,  160,  161,  151,  162,  163,
-      164,  165,  166,  152,  167,  153,  154,  168,  169,  155,
-      156,  157,  170,  158,  159,  160,  161,  171,  162,  163,
-      164,  165,  166,  172,  167,  173,  174,  168,  169,  175,
-       27,   27,  170,  176,  176,  176,  176,  171,  176,  176,
-      176,  176,  176,  172,  176,  173,  174,  176,  176,  175,
+       58,   57,   56,   52,   51,   50,   49,   48,   47,   46,
+       27,   43,   40,   39,   37,   36,   35,   34,   27,  176,
         3,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-
       176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
       176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176
+      176,  176,  176,  176,  176,  176
     } ;
 
-static const flex_int16_t yy_chk[444] =
+static const flex_int16_t yy_chk[257] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    5,    5,    6,    6,   10,   10,   12,   12,
-       14,   12,   15,   12,   14,   12,   12,   16,   17,   14,
-       18,   19,   12,   20,   21,   22,   23,   24,   24,   31,
-       14,   22,   15,   32,   14,   95,   33,   16,   17,   14,
-       18,   19,   12,   20,   21,   22,   23,   27,   27,   31,
+        1,    1,    1,    1,    1,    5,    5,    6,    6,   10,
+       10,   12,   12,   14,   12,   19,   12,   14,   12,   12,
+       22,   38,   14,   24,   24,   12,   22,   27,   27,   29,
+       29,  173,   29,   38,   29,   19,   30,   29,   30,  172,
+       30,   39,   39,   12,   45,   45,   81,   45,   81,   45,
+       53,   53,   45,   53,   77,   53,   68,   68,  104,  104,
+      171,   77,  170,  168,  167,   77,  166,   77,  165,  163,
 
-       27,   22,   27,   32,   34,   27,   33,   29,   29,   35,
-       29,   27,   29,   36,   30,   29,   30,   37,   30,   38,
-       39,   39,   40,   41,   34,   42,   46,   45,   45,   35,
-       45,   27,   45,   36,   47,   45,   48,   37,   49,   38,
-       39,   39,   40,   41,   50,   42,   46,   51,   52,   54,
-       53,   53,   55,   53,   47,   53,   48,   56,   49,   58,
-       59,   60,   61,   62,   50,   63,   64,   51,   52,   54,
-       65,   67,   55,   68,   68,   70,   71,   56,   72,   58,
-       59,   60,   61,   62,   73,   63,   64,   75,   76,   94,
-       65,   67,   79,   68,   68,   70,   71,   80,   72,   81,
-
-       69,   81,   44,   82,   73,   83,   84,   75,   76,   77,
-       85,   86,   79,   87,   88,   89,   77,   80,   90,   91,
-       77,   92,   77,   82,   93,   83,   84,   96,   97,   77,
-       85,   86,   98,   87,   88,   89,   77,   99,   90,   91,
-       77,   92,   77,  100,   93,  101,  102,   96,   97,  103,
-      104,  104,   98,  105,  107,  108,  109,   99,  110,  111,
-      112,  113,  114,  100,  115,  101,  102,  116,  117,  103,
-      104,  104,  118,  105,  107,  108,  109,  119,  110,  111,
-      112,  113,  114,  121,  115,  122,  123,  116,  117,  124,
-      125,  126,  118,  127,  128,  129,  130,  119,  131,  132,
-
-      133,  134,  135,  121,  138,  122,  123,  140,  141,  124,
-      125,  126,  142,  127,  128,  129,  130,  143,  131,  132,
-      133,  134,  135,  144,  138,  145,  146,  140,  141,  147,
-      148,  149,  142,  150,  151,  152,  154,  143,  155,  158,
-      159,  161,  162,  144,  163,  145,  146,  165,  166,  147,
-      148,  149,  167,  150,  151,  152,  154,  168,  155,  158,
-      159,  161,  162,  170,  163,  171,  172,  165,  166,  173,
-       25,   11,  167,    3,    0,    0,    0,  168,    0,    0,
-        0,    0,    0,  170,    0,  171,  172,    0,    0,  173,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
+      162,  161,  159,  158,  155,  154,  152,  151,  150,  149,
+      148,  147,  146,  145,  144,  143,  142,  141,  140,  138,
+      135,  134,  133,  132,  131,  130,  129,  128,  127,  126,
+      125,  124,  123,  122,  121,  119,  118,  117,  116,  115,
+      114,  113,  112,  111,  110,  109,  108,  107,  105,  103,
+      102,  101,  100,   99,   98,   97,   96,   95,   94,   93,
+       92,   91,   90,   89,   88,   87,   86,   85,   84,   83,
+       82,   80,   79,   76,   75,   73,   72,   71,   70,   69,
+       67,   65,   64,   63,   62,   61,   60,   59,   58,   56,
+       55,   54,   52,   51,   50,   49,   48,   47,   46,   44,
 
+       42,   41,   40,   37,   36,   35,   34,   33,   32,   31,
+       25,   23,   21,   20,   18,   17,   16,   15,   11,    3,
       176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
       176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
       176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
-      176,  176,  176
+      176,  176,  176,  176,  176,  176
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -903,10 +859,10 @@ static void wkt_lexer_unknown()
 #define NAN 0.0/0.0
 #endif
 
-#line 906 "lwin_wkt_lex.c"
+#line 862 "lwin_wkt_lex.c"
 #define YY_NO_INPUT 1
 /* Suppress the default implementations. */
-#line 909 "lwin_wkt_lex.c"
+#line 865 "lwin_wkt_lex.c"
 
 #define INITIAL 0
 
@@ -1124,7 +1080,7 @@ YY_DECL
 #line 60 "lwin_wkt_lex.l"
 
 
-#line 1127 "lwin_wkt_lex.c"
+#line 1083 "lwin_wkt_lex.c"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -1179,29 +1135,35 @@ do_action:	/* This label is used only to access EOF actions. */
 
 case 1:
 /* rule 1 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+YY_LINENO_REWIND_TO(yy_cp - 1);
+(yy_c_buf_p) = yy_cp -= 1;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
 #line 62 "lwin_wkt_lex.l"
 {
 	LWDEBUG(5,"DOUBLE");
 	wkt_yylval.doublevalue = atof(wkt_yytext);
-	yyless(wkt_yyleng-1);
 	return DOUBLE_TOK;
 	}
 	YY_BREAK
 case 2:
 /* rule 2 can match eol */
+*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
+YY_LINENO_REWIND_TO(yy_bp + 3);
+(yy_c_buf_p) = yy_cp = yy_bp + 3;
+YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 69 "lwin_wkt_lex.l"
+#line 68 "lwin_wkt_lex.l"
 {
 	LWDEBUG(5,"DOUBLE NAN");
 	wkt_yylval.doublevalue = NAN;
-	yyless(wkt_yyleng-1);
 	return DOUBLE_TOK;
 }
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 76 "lwin_wkt_lex.l"
+#line 74 "lwin_wkt_lex.l"
 {
 	LWDEBUG(5,"SRID");
 	wkt_yylval.integervalue = wkt_lexer_read_srid(wkt_yytext);
@@ -1210,87 +1172,87 @@ YY_RULE_SETUP
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 82 "lwin_wkt_lex.l"
+#line 80 "lwin_wkt_lex.l"
 { return COLLECTION_TOK; }
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 83 "lwin_wkt_lex.l"
+#line 81 "lwin_wkt_lex.l"
 { return MSURFACE_TOK; }
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 84 "lwin_wkt_lex.l"
+#line 82 "lwin_wkt_lex.l"
 { return MPOLYGON_TOK; }
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 85 "lwin_wkt_lex.l"
+#line 83 "lwin_wkt_lex.l"
 { return MCURVE_TOK; }
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 86 "lwin_wkt_lex.l"
+#line 84 "lwin_wkt_lex.l"
 { return MLINESTRING_TOK; }
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 87 "lwin_wkt_lex.l"
+#line 85 "lwin_wkt_lex.l"
 { return MPOINT_TOK; }
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 88 "lwin_wkt_lex.l"
+#line 86 "lwin_wkt_lex.l"
 { return CURVEPOLYGON_TOK; }
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 89 "lwin_wkt_lex.l"
+#line 87 "lwin_wkt_lex.l"
 { return POLYGON_TOK; }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 90 "lwin_wkt_lex.l"
+#line 88 "lwin_wkt_lex.l"
 { return COMPOUNDCURVE_TOK; }
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 91 "lwin_wkt_lex.l"
+#line 89 "lwin_wkt_lex.l"
 { return CIRCULARSTRING_TOK; }
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 92 "lwin_wkt_lex.l"
+#line 90 "lwin_wkt_lex.l"
 { return LINESTRING_TOK; }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 93 "lwin_wkt_lex.l"
+#line 91 "lwin_wkt_lex.l"
 { return POLYHEDRALSURFACE_TOK; }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 94 "lwin_wkt_lex.l"
+#line 92 "lwin_wkt_lex.l"
 { return TRIANGLE_TOK; }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 95 "lwin_wkt_lex.l"
+#line 93 "lwin_wkt_lex.l"
 { return TIN_TOK; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 96 "lwin_wkt_lex.l"
+#line 94 "lwin_wkt_lex.l"
 { return POINT_TOK; }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 97 "lwin_wkt_lex.l"
+#line 95 "lwin_wkt_lex.l"
 { return EMPTY_TOK; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 99 "lwin_wkt_lex.l"
+#line 97 "lwin_wkt_lex.l"
 {
 	LWDEBUG(5,"DIMENSIONALITY");
 	wkt_yylval.stringvalue = wkt_yytext;
@@ -1299,33 +1261,33 @@ YY_RULE_SETUP
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 105 "lwin_wkt_lex.l"
+#line 103 "lwin_wkt_lex.l"
 { LWDEBUG(5,"LBRACKET"); return LBRACKET_TOK; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 106 "lwin_wkt_lex.l"
+#line 104 "lwin_wkt_lex.l"
 { LWDEBUG(5,"RBRACKET"); return RBRACKET_TOK; }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 107 "lwin_wkt_lex.l"
+#line 105 "lwin_wkt_lex.l"
 { LWDEBUG(5,"COMMA"); return COMMA_TOK; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 108 "lwin_wkt_lex.l"
+#line 106 "lwin_wkt_lex.l"
 { LWDEBUG(5,"SEMICOLON"); return SEMICOLON_TOK; }
 	YY_BREAK
 case 25:
 /* rule 25 can match eol */
 YY_RULE_SETUP
-#line 110 "lwin_wkt_lex.l"
+#line 108 "lwin_wkt_lex.l"
 { /* ignore whitespace */ LWDEBUG(5,"WHITESPACE"); }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 112 "lwin_wkt_lex.l"
+#line 110 "lwin_wkt_lex.l"
 { /* Error out and stop parsing on unknown/unexpected characters */
 	LWDEBUG(5,"UNKNOWN");
 	wkt_lexer_unknown();
@@ -1334,10 +1296,10 @@ YY_RULE_SETUP
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 118 "lwin_wkt_lex.l"
+#line 116 "lwin_wkt_lex.l"
 ECHO;
 	YY_BREAK
-#line 1340 "lwin_wkt_lex.c"
+#line 1302 "lwin_wkt_lex.c"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2283,7 +2245,7 @@ static int yy_flex_strlen (const char * s )
 
 #define YYTABLES_NAME "yytables"
 
-#line 118 "lwin_wkt_lex.l"
+#line 116 "lwin_wkt_lex.l"
 
 
 void *wkt_yyalloc (yy_size_t  size )
diff --git a/liblwgeom/lwin_wkt_lex.l b/liblwgeom/lwin_wkt_lex.l
index d301a2259..f2a4d963c 100644
--- a/liblwgeom/lwin_wkt_lex.l
+++ b/liblwgeom/lwin_wkt_lex.l
@@ -59,17 +59,15 @@ static void wkt_lexer_unknown()
 
 %%
 
--?(([0-9]+\.?)|([0-9]*\.?[0-9]+)([eE][-+]?[0-9]+)?)[ \,\)\t\n\r] {
+-?(([0-9]+\.?)|([0-9]*\.?[0-9]+)([eE][-+]?[0-9]+)?)/[ \,\)\t\n\r] {
 	LWDEBUG(5,"DOUBLE");
 	wkt_yylval.doublevalue = atof(wkt_yytext);
-	yyless(wkt_yyleng-1);
 	return DOUBLE_TOK;
 	}
 
-([Nn][Aa][Nn])[ \,\)\t\n\r] {
+([Nn][Aa][Nn])/[ \,\)\t\n\r] {
 	LWDEBUG(5,"DOUBLE NAN");
 	wkt_yylval.doublevalue = NAN;
-	yyless(wkt_yyleng-1);
 	return DOUBLE_TOK;
 }
 
diff --git a/liblwgeom/lwutil.c b/liblwgeom/lwutil.c
index 5f63acfa8..f8a39aa19 100644
--- a/liblwgeom/lwutil.c
+++ b/liblwgeom/lwutil.c
@@ -270,6 +270,10 @@ char *lwmessage_truncate(char *str, int startpos, int endpos, int maxlength, int
 	char *output;
 	char *outstart;
 
+	int strsz = strlen(str);
+	if (endpos > strsz)
+		endpos = strsz;
+
 	/* Allocate space for new string */
 	output = lwalloc(maxlength + 4);
 	output[0] = '\0';

-----------------------------------------------------------------------

Summary of changes:
 NEWS                     |   1 +
 liblwgeom/lwin_wkt_lex.c | 260 ++++++++++++++++++++---------------------------
 liblwgeom/lwin_wkt_lex.l |   6 +-
 liblwgeom/lwutil.c       |   4 +
 4 files changed, 118 insertions(+), 153 deletions(-)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list