[SCM] PostGIS branch stable-3.5 updated. 3.5.3-6-g0dfd31806

git at osgeo.org git at osgeo.org
Thu Jun 5 00:55:38 PDT 2025


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, stable-3.5 has been updated
       via  0dfd3180662efcc60a063a931476bf797a5f205f (commit)
      from  21bde1da74c410bd06bfc3e55b826a3f4cb6142a (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 0dfd3180662efcc60a063a931476bf797a5f205f
Author: Sandro Santilli <strk at kbt.io>
Date:   Thu Jun 5 09:15:12 2025 +0200

    Fix crash on TopoGeo_addLineString(empty)
    
    References #5922 in 3.5 branch (3.5.4dev)

diff --git a/NEWS b/NEWS
index 77ffd44f3..4544d9ac0 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,7 @@ PostgreSQL 12-18 required. GEOS 3.8+ required. Proj 6.1+ required.
 
 - #5908, [topology] Fix crash in GetFaceContainingPoint (Sandro Santilli)
 - #5907, [topology] Fix crash in TopoGeo_AddPolygon with EMPTY input (Sandro Santilli)
+- #5922, [topology] Fix crash in TopoGeo_AddLinestring with EMPTY input (Sandro Santilli)
 
 
 PostGIS 3.5.3
diff --git a/liblwgeom/topo/lwgeom_topo.c b/liblwgeom/topo/lwgeom_topo.c
index ef244e628..feb818f93 100644
--- a/liblwgeom/topo/lwgeom_topo.c
+++ b/liblwgeom/topo/lwgeom_topo.c
@@ -7145,6 +7145,12 @@ _lwt_AddLine(LWT_TOPOLOGY* topo, LWLINE* line, double tol, int* nedges,
   int input_was_closed = 0;
   POINT4D originalStartPoint;
 
+  if ( lwline_is_empty(line) )
+  {
+    *nedges = 0;
+    return NULL;
+  }
+
   if ( lwline_is_closed(line) )
   {
     input_was_closed = 1;
diff --git a/topology/postgis_topology.c b/topology/postgis_topology.c
index ae7521a29..7bd5dba48 100644
--- a/topology/postgis_topology.c
+++ b/topology/postgis_topology.c
@@ -5106,6 +5106,13 @@ Datum TopoGeo_AddLinestring(PG_FUNCTION_ARGS)
         PG_RETURN_NULL();
       }
     }
+    /* Nothing to do if line is empty */
+    if ( lwline_is_empty(ln) )
+    {
+      lwgeom_free(lwgeom);
+      PG_FREE_IF_COPY(geom, 1);
+      PG_RETURN_NULL();
+    }
 
     tol = PG_GETARG_FLOAT8(2);
     if ( tol < 0 )
diff --git a/topology/test/regress/topogeo_addlinestring.sql b/topology/test/regress/topogeo_addlinestring.sql
index 79bdc4b84..1b35ba150 100644
--- a/topology/test/regress/topogeo_addlinestring.sql
+++ b/topology/test/regress/topogeo_addlinestring.sql
@@ -58,6 +58,7 @@ $$ LANGUAGE 'plpgsql';
 SELECT 'invalid', TopoGeo_addLineString('city_data', 'SRID=4326;MULTILINESTRING((36 26, 38 30))');
 SELECT 'invalid', TopoGeo_addLineString('city_data', 'SRID=4326;POINT(36 26)');
 SELECT 'invalid', TopoGeo_addLineString('invalid', 'SRID=4326;LINESTRING(36 26, 0 0)');
+SELECT 'empty', TopoGeo_addLineString('city_data', 'SRID=4326;LINESTRING EMPTY');
 
 -- Isolated edge in universal face
 SELECT 'iso_uni', TopoGeo_addLineString('city_data', 'SRID=4326;LINESTRING(36 26, 38 30)');
diff --git a/topology/test/regress/topogeo_addlinestring_expected b/topology/test/regress/topogeo_addlinestring_expected
index 9b6efe509..6757356c1 100644
--- a/topology/test/regress/topogeo_addlinestring_expected
+++ b/topology/test/regress/topogeo_addlinestring_expected
@@ -3,6 +3,7 @@ max|edge|26
 ERROR:  Invalid geometry type (MULTILINESTRING) passed to TopoGeo_AddLinestring, expected LINESTRING
 ERROR:  Invalid geometry type (POINT) passed to TopoGeo_AddLinestring, expected LINESTRING
 ERROR:  No topology with name "invalid" in topology.topology
+empty|
 iso_uni|27
 iso_uni|N||POINT(36 26)
 iso_uni|N||POINT(38 30)

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

Summary of changes:
 NEWS                                                 | 1 +
 liblwgeom/topo/lwgeom_topo.c                         | 6 ++++++
 topology/postgis_topology.c                          | 7 +++++++
 topology/test/regress/topogeo_addlinestring.sql      | 1 +
 topology/test/regress/topogeo_addlinestring_expected | 1 +
 5 files changed, 16 insertions(+)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list