From 5f67d6b4a935148b772155a73c45c3b8a2bf231d Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Mon, 8 Feb 2010 18:54:47 +0000 Subject: [PATCH] Don't refuse to unparse malformed geometries. Fixes #411. Didn't seem to expose the crash in #168, the testcase for it was expanded to extract invalidity reason. git-svn-id: http://svn.osgeo.org/postgis/trunk@5214 b70326c6-7e19-0410-871a-916f4a2858ee --- postgis/lwgeom_inout.c | 6 +++--- postgis/lwgeom_ogc.c | 2 +- regress/tickets.sql | 2 +- regress/tickets_expected | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/postgis/lwgeom_inout.c b/postgis/lwgeom_inout.c index 5ea0294dc..38b37b29d 100644 --- a/postgis/lwgeom_inout.c +++ b/postgis/lwgeom_inout.c @@ -101,7 +101,7 @@ Datum LWGEOM_out(PG_FUNCTION_ARGS) int result; lwgeom = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - result = serialized_lwgeom_to_hexwkb(&lwg_unparser_result, SERIALIZED_FORM(lwgeom), PARSER_CHECK_ALL, -1); + result = serialized_lwgeom_to_hexwkb(&lwg_unparser_result, SERIALIZED_FORM(lwgeom), PARSER_CHECK_NONE, -1); if (result) PG_UNPARSER_ERROR(lwg_unparser_result); @@ -143,7 +143,7 @@ Datum LWGEOM_asHEXEWKB(PG_FUNCTION_ARGS) } } - result = serialized_lwgeom_to_hexwkb(&lwg_unparser_result, SERIALIZED_FORM(lwgeom), PARSER_CHECK_ALL, byteorder); + result = serialized_lwgeom_to_hexwkb(&lwg_unparser_result, SERIALIZED_FORM(lwgeom), PARSER_CHECK_NONE, byteorder); if (result) PG_UNPARSER_ERROR(lwg_unparser_result); @@ -172,7 +172,7 @@ Datum LWGEOM_to_text(PG_FUNCTION_ARGS) text *text_result; lwgeom = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - result = serialized_lwgeom_to_hexwkb(&lwg_unparser_result, SERIALIZED_FORM(lwgeom), PARSER_CHECK_ALL, -1); + result = serialized_lwgeom_to_hexwkb(&lwg_unparser_result, SERIALIZED_FORM(lwgeom), PARSER_CHECK_NONE, -1); if (result) PG_UNPARSER_ERROR(lwg_unparser_result); diff --git a/postgis/lwgeom_ogc.c b/postgis/lwgeom_ogc.c index 6ad9c4d13..348a3016a 100644 --- a/postgis/lwgeom_ogc.c +++ b/postgis/lwgeom_ogc.c @@ -1121,7 +1121,7 @@ Datum LWGEOM_asText(PG_FUNCTION_ARGS) ogclwgeom = (PG_LWGEOM *)DatumGetPointer(DirectFunctionCall1( LWGEOM_force_2d, PointerGetDatum(lwgeom))); - result = serialized_lwgeom_to_ewkt(&lwg_unparser_result, SERIALIZED_FORM(ogclwgeom), PARSER_CHECK_ALL); + result = serialized_lwgeom_to_ewkt(&lwg_unparser_result, SERIALIZED_FORM(ogclwgeom), PARSER_CHECK_NONE); if (result) PG_UNPARSER_ERROR(lwg_unparser_result); diff --git a/regress/tickets.sql b/regress/tickets.sql index 4aed2b07e..92a0a0982 100644 --- a/regress/tickets.sql +++ b/regress/tickets.sql @@ -117,7 +117,7 @@ FROM ( VALUES -- #168 -- -SELECT '#168', ST_NPoints(g), ST_AsText(g) +SELECT '#168', ST_NPoints(g), ST_AsText(g), ST_isValidReason(g) FROM ( VALUES ('01060000C00100000001030000C00100000003000000E3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFFE3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFFE3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFF'::geometry) ) AS v(g); diff --git a/regress/tickets_expected b/regress/tickets_expected index 8d53d54bc..0189c34f0 100644 --- a/regress/tickets_expected +++ b/regress/tickets_expected @@ -31,7 +31,7 @@ ERROR: geometry contains non-closed rings #157|ST_Polygon|POLYGON #157|ST_CurvePolygon|CURVEPOLYGON #157|ST_CircularString|CIRCULARSTRING -ERROR: geometry requires more points +#168|3|MULTIPOLYGON(((4275341.96977851 259186.966993061,4275341.96977851 259186.966993061,4275341.96977851 259186.966993061)))|IllegalArgumentException: Invalid number of points in LinearRing found 3 - must be 0 or >= 4 #175|SRID=26915;POINT(482020 4984378) #178a|0 #178b|5 -- 2.50.1