[SCM] PostGIS branch master updated. 3.5.0-20-gf266d62c1

git at osgeo.org git at osgeo.org
Fri Oct 11 12:28:44 PDT 2024


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "PostGIS".

The branch, master has been updated
       via  f266d62c1e209c4544ab44eeb149ebe951cd4064 (commit)
      from  cfc46e4641c1fa7b3b391e3846ae3a2f79cd07b7 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit f266d62c1e209c4544ab44eeb149ebe951cd4064
Author: Björn Harrtell <bjorn at septima.dk>
Date:   Thu Oct 10 14:46:49 2024 +0200

    Fix ST_NewEdgesSplit can cause invalid topology
    
    References #5795 in master branch (3.6.0dev)
    Includes testcase

diff --git a/liblwgeom/topo/lwgeom_topo.c b/liblwgeom/topo/lwgeom_topo.c
index cf869bb1a..c5accb28c 100644
--- a/liblwgeom/topo/lwgeom_topo.c
+++ b/liblwgeom/topo/lwgeom_topo.c
@@ -1336,7 +1336,7 @@ lwt_NewEdgesSplit( LWT_TOPOLOGY* topo, LWT_ELEMID edge,
 
   /* Update all next edge references pointing to old edge id */
 
-  updedge.next_right = newedges[1].edge_id;
+  updedge.next_right = newedges[0].edge_id;
   seledge.next_right = edge;
   seledge.start_node = oldedge->start_node;
   ret = lwt_be_updateEdges(topo,
@@ -1350,7 +1350,7 @@ lwt_NewEdgesSplit( LWT_TOPOLOGY* topo, LWT_ELEMID edge,
     return -1;
   }
 
-  updedge.next_right = -newedges[0].edge_id;
+  updedge.next_right = -newedges[1].edge_id;
   seledge.next_right = -edge;
   seledge.start_node = oldedge->end_node;
   ret = lwt_be_updateEdges(topo,
diff --git a/topology/test/regress/st_newedgessplit.sql b/topology/test/regress/st_newedgessplit.sql
index 075f599b3..893ac8a24 100644
--- a/topology/test/regress/st_newedgessplit.sql
+++ b/topology/test/regress/st_newedgessplit.sql
@@ -143,3 +143,33 @@ DROP TABLE t;
 
 DROP FUNCTION check_changes();
 SELECT DropTopology('city_data');
+
+select '---';
+
+-- Regression test for ST_NewEdgesSplit can cause invalid topology
+-- See https://trac.osgeo.org/postgis/ticket/5795
+select '#5795|Regression test starting';
+select '#5795|Create t5795' from (select null from topology.createtopology('t5795', 0, 0)) q;
+select '#5795|N' || topology.st_addisonode('t5795', 0, st_geomfromtext('POINT(0 0)'));
+select '#5795|N' || topology.st_addisonode('t5795', 0, st_geomfromtext('POINT(10 10)'));
+select '#5795|E' || topology.st_addisoedge('t5795', 1, 2, st_geomfromtext('LINESTRING(0 0, 10 0, 10 10)'));
+select '#5795|E' || topology.st_addedgenewfaces('t5795', 2, 1, st_geomfromtext('LINESTRING(10 10, 0 10, 0 0)'));
+select '#5795|N' || topology.st_newedgessplit('t5795', 1, st_geomfromtext('POINT(5 0)'));
+select '#5795|E' || edge_id, next_left_edge, next_right_edge, left_face, right_face from t5795.edge_data order by edge_id;
+select '#5795|V1' ||topology.validatetopology('t5795');
+select '#5795|N' || topology.st_newedgessplit('t5795', 4, st_geomfromtext('POINT(10 5)'));
+select '#5795|E' || edge_id, next_left_edge, next_right_edge, left_face, right_face from t5795.edge_data order by edge_id;
+select '#5795|V2' ||topology.validatetopology('t5795');
+select '#5795|E' || topology.st_addedgenewfaces('t5795', 3, 4, st_geomfromtext('LINESTRING(5 0, 10 5)'));
+select '#5795|E' || edge_id, next_left_edge, next_right_edge, left_face, right_face from t5795.edge_data order by edge_id;
+select '#5795|V3' ||topology.validatetopology('t5795');
+select '#5795|N' || topology.st_newedgessplit('t5795', 7, st_geomfromtext('POINT(7.5 2.5)'));
+select '#5795|E' || edge_id, next_left_edge, next_right_edge, left_face, right_face from t5795.edge_data order by edge_id;
+select '#5795|V4' ||topology.validatetopology('t5795');
+select '#5795|N' || topology.st_newedgessplit('t5795', 5, st_geomfromtext('POINT(10 2.5)'));
+select '#5795|E' || edge_id, next_left_edge, next_right_edge, left_face, right_face from t5795.edge_data order by edge_id;
+select '#5795|V5' || topology.validatetopology('t5795');
+select '#5795|E' || topology.st_addedgenewfaces('t5795', 5, 6, st_geomfromtext('LINESTRING(7.5 2.5, 10 2.5)'));
+select topology.validatetopology('t5795');
+select '#5795|Drop t5795' from (select null from topology.droptopology('t5795')) q;
+select '#5795|Regression test finished';
diff --git a/topology/test/regress/st_newedgessplit_expected b/topology/test/regress/st_newedgessplit_expected
index d02e0bee0..9d9d4abfd 100644
--- a/topology/test/regress/st_newedgessplit_expected
+++ b/topology/test/regress/st_newedgessplit_expected
@@ -36,3 +36,43 @@ seq_reset|1|1|1
 robust.1|E1|N3
 robust.2|t|t
 Topology 'city_data' dropped
+---
+#5795|Regression test starting
+#5795|Create t5795
+#5795|N1
+#5795|N2
+#5795|E1
+#5795|E2
+#5795|N3
+#5795|E2|3|-4|1|0
+#5795|E3|4|-2|1|0
+#5795|E4|2|-3|1|0
+#5795|N4
+#5795|E2|3|-6|1|0
+#5795|E3|5|-2|1|0
+#5795|E5|6|-3|1|0
+#5795|E6|2|-5|1|0
+#5795|E7
+#5795|E2|3|-6|3|0
+#5795|E3|7|-2|3|0
+#5795|E5|-7|-3|2|0
+#5795|E6|2|-5|3|0
+#5795|E7|6|5|3|2
+#5795|N5
+#5795|E2|3|-6|3|0
+#5795|E3|8|-2|3|0
+#5795|E5|-9|-3|2|0
+#5795|E6|2|-5|3|0
+#5795|E8|9|5|3|2
+#5795|E9|6|-8|3|2
+#5795|N6
+#5795|E2|3|-6|3|0
+#5795|E3|8|-2|3|0
+#5795|E6|2|-11|3|0
+#5795|E8|9|10|3|2
+#5795|E9|6|-8|3|2
+#5795|E10|11|-3|2|0
+#5795|E11|-9|-10|2|0
+#5795|E12
+#5795|Drop t5795
+#5795|Regression test finished

-----------------------------------------------------------------------

Summary of changes:
 liblwgeom/topo/lwgeom_topo.c                    |  4 +--
 topology/test/regress/st_newedgessplit.sql      | 30 +++++++++++++++++++
 topology/test/regress/st_newedgessplit_expected | 40 +++++++++++++++++++++++++
 3 files changed, 72 insertions(+), 2 deletions(-)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list