From: Sandro Santilli Date: Mon, 8 Feb 2010 21:39:57 +0000 (+0000) Subject: Initialie GEOS using lwerror for errors so that exceptions are really handled (or... X-Git-Tag: 2.0.0alpha1~3266 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3e8801ca9be346226ad1033ce24ed251f33e738a;p=postgis Initialie GEOS using lwerror for errors so that exceptions are really handled (or testcases in #411 crash on many GEOS functions) git-svn-id: http://svn.osgeo.org/postgis/trunk@5220 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/postgis/lwgeom_geos.c b/postgis/lwgeom_geos.c index 4f6d50aca..07151fa2a 100644 --- a/postgis/lwgeom_geos.c +++ b/postgis/lwgeom_geos.c @@ -139,7 +139,7 @@ Datum hausdorffdistance(PG_FUNCTION_ARGS) geom1 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); geom2 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); @@ -182,7 +182,7 @@ Datum hausdorffdistancedensify(PG_FUNCTION_ARGS) geom2 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); densifyFrac = PG_GETARG_FLOAT8(2); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); @@ -265,7 +265,7 @@ Datum pgis_union_geometry_array(PG_FUNCTION_ARGS) } /* Ok, we really need geos now ;) */ - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); /* ** First, see if all our elements are POLYGON/MULTIPOLYGON @@ -525,7 +525,7 @@ Datum geomunion(PG_FUNCTION_ARGS) SRID = pglwgeom_getSRID(geom1); errorIfSRIDMismatch(SRID, pglwgeom_getSRID(geom2)); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); @@ -606,7 +606,7 @@ Datum symdifference(PG_FUNCTION_ARGS) SRID = pglwgeom_getSRID(geom1); errorIfSRIDMismatch(SRID, pglwgeom_getSRID(geom2)); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); @@ -675,7 +675,7 @@ Datum boundary(PG_FUNCTION_ARGS) SRID = pglwgeom_getSRID(geom1); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1 ); @@ -738,7 +738,7 @@ Datum convexhull(PG_FUNCTION_ARGS) geom1 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); SRID = pglwgeom_getSRID(geom1); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); @@ -813,7 +813,7 @@ Datum topologypreservesimplify(PG_FUNCTION_ARGS) geom1 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); tolerance = PG_GETARG_FLOAT8(1); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); g3 = GEOSTopologyPreserveSimplify(g1,tolerance); @@ -885,7 +885,7 @@ Datum buffer(PG_FUNCTION_ARGS) nargs = PG_NARGS(); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); @@ -1083,7 +1083,7 @@ Datum intersection(PG_FUNCTION_ARGS) SRID = pglwgeom_getSRID(geom1); errorIfSRIDMismatch(SRID, pglwgeom_getSRID(geom2)); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); POSTGIS_DEBUG(3, "intersection() START"); @@ -1171,7 +1171,7 @@ Datum difference(PG_FUNCTION_ARGS) SRID = pglwgeom_getSRID(geom1); errorIfSRIDMismatch(SRID, pglwgeom_getSRID(geom2)); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); @@ -1240,7 +1240,7 @@ Datum pointonsurface(PG_FUNCTION_ARGS) geom1 = (PG_LWGEOM *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); @@ -1296,7 +1296,7 @@ Datum centroid(PG_FUNCTION_ARGS) geom = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); geosgeom = (GEOSGeometry *)POSTGIS2GEOS(geom); @@ -1610,7 +1610,7 @@ Datum overlaps(PG_FUNCTION_ARGS) if ( box2.ymin > box2.ymax ) PG_RETURN_BOOL(FALSE); } - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); @@ -1742,7 +1742,7 @@ Datum contains(PG_FUNCTION_ARGS) POSTGIS_DEBUGF(3, "Contains: type1: %d, type2: %d", type1, type2); } - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); #ifdef PREPARED_GEOM prep_cache = GetPrepGeomCache( fcinfo, geom1, 0 ); @@ -1808,7 +1808,7 @@ Datum containsproperly(PG_FUNCTION_ARGS) PG_RETURN_BOOL(FALSE); } - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); #ifdef PREPARED_GEOM prep_cache = GetPrepGeomCache( fcinfo, geom1, 0 ); @@ -1943,7 +1943,7 @@ Datum covers(PG_FUNCTION_ARGS) POSTGIS_DEBUGF(3, "Covers: type1: %d, type2: %d", type1, type2); } - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); #ifdef PREPARED_GEOM prep_cache = GetPrepGeomCache( fcinfo, geom1, 0 ); @@ -2071,7 +2071,7 @@ Datum within(PG_FUNCTION_ARGS) } } - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); @@ -2203,7 +2203,7 @@ Datum coveredby(PG_FUNCTION_ARGS) } } - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); @@ -2269,7 +2269,7 @@ Datum crosses(PG_FUNCTION_ARGS) } } - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); @@ -2408,7 +2408,7 @@ Datum intersects(PG_FUNCTION_ARGS) } } - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); #ifdef PREPARED_GEOM prep_cache = GetPrepGeomCache( fcinfo, geom1, geom2 ); @@ -2482,7 +2482,7 @@ Datum touches(PG_FUNCTION_ARGS) } } - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1 ); @@ -2547,7 +2547,7 @@ Datum disjoint(PG_FUNCTION_ARGS) } } - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); @@ -2596,7 +2596,7 @@ Datum relate_pattern(PG_FUNCTION_ARGS) errorIfGeometryCollection(geom1,geom2); errorIfSRIDMismatch(pglwgeom_getSRID(geom1), pglwgeom_getSRID(geom2)); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2); @@ -2650,7 +2650,7 @@ Datum relate_full(PG_FUNCTION_ARGS) errorIfGeometryCollection(geom1,geom2); errorIfSRIDMismatch(pglwgeom_getSRID(geom1), pglwgeom_getSRID(geom2)); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1 ); g2 = (GEOSGeometry *)POSTGIS2GEOS(geom2 ); @@ -2728,7 +2728,7 @@ Datum geomequals(PG_FUNCTION_ARGS) if ( box2.ymin != box2.ymin ) PG_RETURN_BOOL(FALSE); } - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); @@ -2774,7 +2774,7 @@ Datum issimple(PG_FUNCTION_ARGS) if (lwgeom_getnumgeometries(SERIALIZED_FORM(geom)) == 0) PG_RETURN_BOOL(true); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom); result = GEOSisSimple(g1); @@ -2808,7 +2808,7 @@ Datum isring(PG_FUNCTION_ARGS) if (lwgeom_getnumgeometries(SERIALIZED_FORM(geom)) == 0) PG_RETURN_BOOL(false); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom ); result = GEOSisRing(g1); @@ -3252,7 +3252,7 @@ Datum polygonize_garray(PG_FUNCTION_ARGS) if ( nelems == 0 ) PG_RETURN_NULL(); /* Ok, we really need geos now ;) */ - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); vgeoms = palloc(sizeof(GEOSGeometry *)*nelems); offset = 0; @@ -3313,7 +3313,7 @@ Datum linemerge(PG_FUNCTION_ARGS) geom1 = (PG_LWGEOM *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); PROFSTART(PROF_P2G1); g1 = (GEOSGeometry *)POSTGIS2GEOS(geom1); @@ -3393,7 +3393,7 @@ Datum LWGEOM_buildarea(PG_FUNCTION_ARGS) POSTGIS_DEBUGF(3, "LWGEOM_buildarea got geom @ %p", geom); - initGEOS(lwnotice, lwnotice); + initGEOS(lwnotice, lwerror); vgeoms[0] = (const GEOSGeometry *)POSTGIS2GEOS(geom); geos_result = GEOSPolygonize(vgeoms, 1);