From c38ca5b5e3624c3ddc8dfa293c4b787094e2698e Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Tue, 18 Jan 2005 12:44:13 +0000 Subject: [PATCH] Handled GEOS Geometry construction errors as FALSE results in isvalid(geom). git-svn-id: http://svn.osgeo.org/postgis/trunk@1313 b70326c6-7e19-0410-871a-916f4a2858ee --- lwgeom/lwgeom_geos.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lwgeom/lwgeom_geos.c b/lwgeom/lwgeom_geos.c index 8a3205dfc..8df5aa4fb 100644 --- a/lwgeom/lwgeom_geos.c +++ b/lwgeom/lwgeom_geos.c @@ -111,6 +111,7 @@ extern Geometry *PostGIS2GEOS_collection(int type, Geometry **geoms, int ngeoms, void NOTICE_MESSAGE(char *msg); PG_LWGEOM *GEOS2POSTGIS(Geometry *geom, char want3d); Geometry * POSTGIS2GEOS(PG_LWGEOM *g); +Geometry * LWGEOM2GEOS(LWGEOM *g); void errorIfGeometryCollection(PG_LWGEOM *g1, PG_LWGEOM *g2); LWPOINT *lwpoint_from_geometry(Geometry *g, char want3d); LWLINE *lwline_from_geometry(Geometry *g, char want3d); @@ -1068,6 +1069,7 @@ PG_FUNCTION_INFO_V1(isvalid); Datum isvalid(PG_FUNCTION_ARGS) { PG_LWGEOM *geom1; + LWGEOM *lwgeom; bool result; Geometry *g1; @@ -1082,7 +1084,19 @@ Datum isvalid(PG_FUNCTION_ARGS) #ifdef PROFILE profstart(PROF_P2G1); #endif - g1 = POSTGIS2GEOS(geom1); + lwgeom = lwgeom_deserialize(SERIALIZED_FORM(geom1)); + if ( ! lwgeom ) + { + lwerror("unable to deserialize input"); + } + g1 = LWGEOM2GEOS(lwgeom); + if ( ! g1 ) + { + lwgeom_release(lwgeom); + PG_RETURN_BOOL(FALSE); + } + lwgeom_release(lwgeom); + //g1 = POSTGIS2GEOS(geom1); #ifdef PROFILE profstop(PROF_P2G1); #endif -- 2.50.0