]> granicus.if.org Git - postgis/commitdiff
#2307, ST_MakeValid outputs invalid geometries
authorPaul Ramsey <pramsey@cleverelephant.ca>
Wed, 5 Jun 2013 18:11:58 +0000 (18:11 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Wed, 5 Jun 2013 18:11:58 +0000 (18:11 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@11525 b70326c6-7e19-0410-871a-916f4a2858ee

NEWS
liblwgeom/lwgeom_geos_clean.c

diff --git a/NEWS b/NEWS
index e33b75328c32182c4214e3aa2684d319cd612d17..fb29634a3a438b1685723e0e272376a756ee9681 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -200,6 +200,7 @@ PostGIS 2.1.0
   - #2257, GBOX variables not initialized when testing with empty geometries
   - #2271, Prevent parallel make of raster
   - #2282, Fix call to undefined function nd_stats_to_grid() in debug mode
+  - #2307, ST_MakeValid outputs invalid geometries
   - #2309, Remove confusing INFO message when trying to get SRS info
   - #2348, Provide raster upgrade path for 2.0 to 2.1
 
index f9ddf564ef830f73d5ba7b5143b2e6058cd78952..5c13204b1596b263aa9be7675e7cd486cc555771 100644 (file)
@@ -317,6 +317,7 @@ lwcollection_make_geos_friendly(LWCOLLECTION *g)
 
        ret = lwalloc(sizeof(LWCOLLECTION));
        memcpy(ret, g, sizeof(LWCOLLECTION));
+    ret->maxgeoms = g->ngeoms;
 
        for (i=0; i<g->ngeoms; i++)
        {
@@ -324,7 +325,7 @@ lwcollection_make_geos_friendly(LWCOLLECTION *g)
                if ( newg ) new_geoms[new_ngeoms++] = newg;
        }
 
-       ret->bbox = 0; /* recompute later... */
+       ret->bbox = NULL; /* recompute later... */
 
        ret->ngeoms = new_ngeoms;
        if ( new_ngeoms )
@@ -334,7 +335,8 @@ lwcollection_make_geos_friendly(LWCOLLECTION *g)
        else
        {
                free(new_geoms);
-               ret->geoms = 0;
+               ret->geoms = NULL;
+        ret->maxgeoms = 0;
        }
 
        return (LWGEOM*)ret;
@@ -1045,16 +1047,16 @@ lwgeom_make_valid(LWGEOM* lwgeom_in)
        }
 
        lwgeom_out = GEOS2LWGEOM(geosout, is3d);
+       GEOSGeom_destroy(geosout);
+
        if ( lwgeom_is_collection(lwgeom_in) && ! lwgeom_is_collection(lwgeom_out) )
        {
                LWDEBUG(3, "lwgeom_make_valid: forcing multi");
                lwgeom_tmp = lwgeom_as_multi(lwgeom_out);
-               lwgeom_free(lwgeom_out);
+        // lwgeom_free(lwgeom_out);
                lwgeom_out = lwgeom_tmp;
        }
 
-       GEOSGeom_destroy(geosout);
-
        lwgeom_out->srid = lwgeom_in->srid;
        return lwgeom_out;
 }