Correctly plug nodes leak in _lwt_AddEdge
authorSandro Santilli <strk@keybit.net>
Wed, 26 Aug 2015 12:16:26 +0000 (12:16 +0000)
committerSandro Santilli <strk@keybit.net>
Wed, 26 Aug 2015 12:16:26 +0000 (12:16 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@14003 b70326c6-7e19-0410-871a-916f4a2858ee

liblwgeom/lwgeom_topo.c

index 86b1e7be8309c3a4c834dd5d1e42995fae41ad64..b4cfd4299ca20d0ed41c712e6aab4dda9d5f363c 100644 (file)
@@ -2271,6 +2271,7 @@ _lwt_AddEdge( LWT_TOPOLOGY* topo,
       }
       else if ( newedge.face_left != node->containing_face )
       {
+        _lwt_release_nodes(endpoints, num_nodes);
         lwerror("SQL/MM Spatial exception - geometry crosses an edge"
                 " (endnodes in faces %" LWTFMT_ELEMID " and %" LWTFMT_ELEMID ")",
                 newedge.face_left, node->containing_face);
@@ -2291,6 +2292,7 @@ _lwt_AddEdge( LWT_TOPOLOGY* topo,
   {
     if ( ! start_node_geom )
     {
+      if ( num_nodes ) _lwt_release_nodes(endpoints, num_nodes);
       lwerror("SQL/MM Spatial exception - non-existent node");
       return -1;
     }
@@ -2300,6 +2302,7 @@ _lwt_AddEdge( LWT_TOPOLOGY* topo,
       getPoint2d_p(pa, 0, &pn);
       if ( ! p2d_same(&pn, &p1) )
       {
+        if ( num_nodes ) _lwt_release_nodes(endpoints, num_nodes);
         lwerror("SQL/MM Spatial exception"
                 " - start node not geometry start point."
                 //" - start node not geometry start point (%g,%g != %g,%g).", pn.x, pn.y, p1.x, p1.y
@@ -2310,6 +2313,7 @@ _lwt_AddEdge( LWT_TOPOLOGY* topo,
 
     if ( ! end_node_geom )
     {
+      if ( num_nodes ) _lwt_release_nodes(endpoints, num_nodes);
       lwerror("SQL/MM Spatial exception - non-existent node");
       return -1;
     }
@@ -2319,6 +2323,7 @@ _lwt_AddEdge( LWT_TOPOLOGY* topo,
       getPoint2d_p(pa, 0, &pn);
       if ( ! p2d_same(&pn, &p2) )
       {
+        if ( num_nodes ) _lwt_release_nodes(endpoints, num_nodes);
         lwerror("SQL/MM Spatial exception"
                 " - end node not geometry end point."
                 //" - end node not geometry end point (%g,%g != %g,%g).", pn.x, pn.y, p2.x, p2.y
@@ -2327,6 +2332,8 @@ _lwt_AddEdge( LWT_TOPOLOGY* topo,
       }
     }
 
+    if ( num_nodes ) _lwt_release_nodes(endpoints, num_nodes);
+
     if ( _lwt_CheckEdgeCrossing( topo, start_node, end_node, geom, 0 ) )
       return -1;