Changeset: adf21ae4aa9d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/adf21ae4aa9d Modified Files: geom/monetdb5/geom.c Branch: geo-update Log Message:
Merged. diffs (47 lines): diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c --- a/geom/monetdb5/geom.c +++ b/geom/monetdb5/geom.c @@ -1416,24 +1416,27 @@ transformPolygon(GEOSGeometry **transfor throw(MAL, "geom.Transform", SQLSTATE(38000) "Geos operation GEOSGetInteriorRingN failed."); } - /* iterate over the interiorRing and transform each one of them */ - transformedInteriorRingGeometries = GDKmalloc(numInteriorRings * sizeof(GEOSGeometry *)); - if (transformedInteriorRingGeometries == NULL) { - *transformedGeometry = NULL; - GEOSGeom_destroy(transformedExteriorRingGeometry); - throw(MAL, "geom.Transform", SQLSTATE(HY013) MAL_MALLOC_FAIL); - } - for (i = 0; i < numInteriorRings; i++) { - ret = transformLinearRing(&transformedInteriorRingGeometries[i], GEOSGetInteriorRingN(geosGeometry, i), proj4_src, proj4_dst); - if (ret != MAL_SUCCEED) { - while (--i >= 0) - GEOSGeom_destroy(transformedInteriorRingGeometries[i]); - GDKfree(transformedInteriorRingGeometries); + if(numInteriorRings > 0) + { + /* iterate over the interiorRing and transform each one of them */ + transformedInteriorRingGeometries = GDKmalloc(numInteriorRings * sizeof(GEOSGeometry *)); + if (transformedInteriorRingGeometries == NULL) { + *transformedGeometry = NULL; GEOSGeom_destroy(transformedExteriorRingGeometry); - *transformedGeometry = NULL; - return ret; + throw(MAL, "geom.Transform", SQLSTATE(HY013) MAL_MALLOC_FAIL); } - GEOSSetSRID(transformedInteriorRingGeometries[i], srid); + for (i = 0; i < numInteriorRings; i++) { + ret = transformLinearRing(&transformedInteriorRingGeometries[i], GEOSGetInteriorRingN(geosGeometry, i), proj4_src, proj4_dst); + if (ret != MAL_SUCCEED) { + while (--i >= 0) + GEOSGeom_destroy(transformedInteriorRingGeometries[i]); + GDKfree(transformedInteriorRingGeometries); + GEOSGeom_destroy(transformedExteriorRingGeometry); + *transformedGeometry = NULL; + return ret; + } + GEOSSetSRID(transformedInteriorRingGeometries[i], srid); + } } *transformedGeometry = GEOSGeom_createPolygon(transformedExteriorRingGeometry, transformedInteriorRingGeometries, numInteriorRings); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list