[SCM] PostGIS branch stable-3.2 updated. 3.2.9-7-gd491e6a68
git at osgeo.org
git at osgeo.org
Thu Apr 9 15:01:41 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.2 has been updated
via d491e6a68b19b3a049f72fb5e3b6b9f007e04295 (commit)
from 458f750305a0986d7aac6ab47d4a6fa576d153eb (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 d491e6a68b19b3a049f72fb5e3b6b9f007e04295
Author: Paul Ramsey <pramsey at cleverelephant.ca>
Date: Thu Apr 9 15:01:30 2026 -0700
WKT parser produces incorrect error locations.
In extreme cases causes occasional crashes.
References #6061
diff --git a/NEWS b/NEWS
index 5c95631e9..556664e47 100644
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,7 @@ Proj 4.9+ required.
- #6054, Remove priv escalation scenario. Reported by Daniel Bakker
- GH-850 Use quote_identifier to build tables in pgis_tablefromflatgeobuf (Ariel Mashraki)
- #6060, fully quality calls to helper functions (Paul Ramsey)
+ - #6061, WKT parser produces incorrect error locations (Paul Ramsey)
PostGIS 3.2.9
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