[SCM] PostGIS branch master updated. 3.7.0beta1-264-ge5a87ff878
git at osgeo.org
git at osgeo.org
Sun Aug 9 04:03:26 PDT 2026
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 e5a87ff8789b744bcdc8dfda2d22cde3d62b1fd5 (commit)
via ee4ffa4cf179d0bb8628e04dfd9e132df2fff427 (commit)
from 1847fb9ffe953944a68a07a060e4a7278cb555e3 (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 e5a87ff8789b744bcdc8dfda2d22cde3d62b1fd5
Merge: 1847fb9ffe ee4ffa4cf1
Author: Darafei Praliaskouski <komzpa at gmail.com>
Date: Sun Aug 9 04:03:24 2026 -0700
Merge pull request 'Fix Woodie garden check failures' (!606) from Komzpa/postgis:fix/woodie-garden-real-pass-20260728 into master
Woodie has been reporting the expensive QA workflow as green while the garden child was failing under an ignored failure marker. The failing garden SQL reaches ST_PointOnSurface with a MULTIPOINT containing both EMPTY and non-empty points, and PostgreSQL terminates while evaluating it.
Filter empty collection members before handing the geometry to GEOSPointOnSurface, while keeping the existing empty-geometry result for fully empty input. The regression test fixes the mixed-empty MULTIPOINT case that the generated garden exercises.
The garden workflow now expects the build-test image to provide proj-bin, xsltproc, and libsfcgal-dev >= 2.3.0. It keeps fail-fast assertions for those prerequisites, but does not install or repair missing image packages inside the downstream PostGIS workflow.
References #6108
Reviewed-on: https://gitea.osgeo.org/postgis/postgis/pulls/606
diff --cc .woodpecker/garden.yml
index d95439f679,c636aa8093..0054393116
--- a/.woodpecker/garden.yml
+++ b/.woodpecker/garden.yml
@@@ -40,15 -40,10 +40,14 @@@ steps
commands:
- <<: *steps-env
- <<: *steps-start-postgresql
+ # configure is generated, not committed. qa-expensive.yml runs autogen.sh
+ # as its own step and every build step depends_on it; this workflow is a
+ # single step, so it has to generate configure itself before using it.
+ - ./autogen.sh
- mkdir -p "$${BUILDDIR}"
- cd "$${BUILDDIR}"
- - apt-get update
- - apt-get install -y --no-install-recommends proj-bin
- - rm -rf /var/lib/apt/lists/*
+ - xsltproc --version
+ - 'dpkg --compare-versions "$$(dpkg-query -W -f=''$${Version}'' libsfcgal-dev)" ge 2.3.0'
- projsync --system-directory --file au_icsm_GDA94_GDA2020_conformal_and_distortion.tif
- $${SRCDIR}/configure
CFLAGS="-g -O2 -mtune=generic -fno-omit-frame-pointer"
commit ee4ffa4cf179d0bb8628e04dfd9e132df2fff427
Author: Darafei Praliaskouski <me at komzpa.net>
Date: Tue Jul 28 18:28:56 2026 +0400
Fix Woodie garden check failures
Handle collections with empty members before calling GEOSPointOnSurface, matching other paths that already treat fully empty inputs as empty points. The garden generator exercises MULTIPOINT values that mix EMPTY and non-empty coordinates; on Woodie that input was terminating PostgreSQL during ST_PointOnSurface.
The garden job now asserts the required SFCGAL version and uses the prebuilt build-test image prerequisites instead of repairing the image inside the downstream workflow.
diff --git a/.woodpecker/garden.yml b/.woodpecker/garden.yml
index 7f725b57aa..c636aa8093 100644
--- a/.woodpecker/garden.yml
+++ b/.woodpecker/garden.yml
@@ -42,12 +42,24 @@ steps:
- <<: *steps-start-postgresql
- mkdir -p "$${BUILDDIR}"
- cd "$${BUILDDIR}"
- - apt-get update
- - apt-get install -y --no-install-recommends proj-bin
- - rm -rf /var/lib/apt/lists/*
+ - xsltproc --version
+ - 'dpkg --compare-versions "$$(dpkg-query -W -f=''$${Version}'' libsfcgal-dev)" ge 2.3.0'
- projsync --system-directory --file au_icsm_GDA94_GDA2020_conformal_and_distortion.tif
- $${SRCDIR}/configure
CFLAGS="-g -O2 -mtune=generic -fno-omit-frame-pointer"
LDFLAGS="-Wl,-Bsymbolic-functions -Wl,-z,relro"
+ - mkdir -p
+ extensions/postgis/sql
+ extensions/postgis_raster/sql
+ extensions/postgis_topology/sql
+ extensions/postgis_sfcgal/sql
+ - make -C postgis
+ postgis.sql
+ uninstall_postgis.sql
+ postgis_upgrade.sql
+ legacy.sql
+ uninstall_legacy.sql
+ legacy_minimal.sql
+ legacy_gist.sql
- make -j1
- timeout 270m make garden
diff --git a/liblwgeom/lwgeom_geos.c b/liblwgeom/lwgeom_geos.c
index 276f025485..8bf2261591 100644
--- a/liblwgeom/lwgeom_geos.c
+++ b/liblwgeom/lwgeom_geos.c
@@ -1052,6 +1052,7 @@ LWGEOM *
lwgeom_pointonsurface(const LWGEOM *geom)
{
LWGEOM *result;
+ LWGEOM *geos_input = NULL;
int32_t srid = RESULT_SRID(geom);
uint8_t is3d = FLAGS_GET_Z(geom->flags);
GEOSGeometry *g1, *g3;
@@ -1066,17 +1067,41 @@ lwgeom_pointonsurface(const LWGEOM *geom)
initGEOS(lwnotice, lwgeom_geos_error);
- if (!(g1 = LWGEOM2GEOS(geom, AUTOFIX))) GEOS_FAIL();
+ if (lwgeom_is_collection(geom))
+ {
+ const LWCOLLECTION *col = (const LWCOLLECTION *)geom;
+ LWCOLLECTION *clean = lwcollection_construct_empty(geom->type, geom->srid, is3d, lwgeom_has_m(geom));
+ for (uint32_t i = 0; i < col->ngeoms; i++)
+ {
+ if (!lwgeom_is_empty(col->geoms[i]))
+ lwcollection_add_lwgeom(clean, lwgeom_clone_deep(col->geoms[i]));
+ }
+ geos_input = lwcollection_as_lwgeom(clean);
+ }
+
+ if (!(g1 = LWGEOM2GEOS(geos_input ? geos_input : geom, AUTOFIX)))
+ {
+ lwgeom_free(geos_input);
+ GEOS_FAIL();
+ }
g3 = GEOSPointOnSurface(g1);
- if (!g3) GEOS_FREE_AND_FAIL(g1);
+ if (!g3)
+ {
+ lwgeom_free(geos_input);
+ GEOS_FREE_AND_FAIL(g1);
+ }
GEOSSetSRID(g3, srid);
if (!(result = GEOS2LWGEOM(g3, is3d)))
+ {
+ lwgeom_free(geos_input);
GEOS_FREE_AND_FAIL(g1, g3);
+ }
GEOS_FREE(g1, g3);
+ lwgeom_free(geos_input);
return result;
}
diff --git a/regress/core/tickets.sql b/regress/core/tickets.sql
index fd03131cee..49248d28f7 100644
--- a/regress/core/tickets.sql
+++ b/regress/core/tickets.sql
@@ -782,6 +782,7 @@ FROM (SELECT 'POLYGON((1 1 1, 5 1 1,5 5 1, 1 5 1,1 1 1))'::geometry as a, 'LINES
SELECT '#2108', ST_AsEWKT(ST_LineInterpolatePoint('SRID=3395;LINESTRING M EMPTY'::geometry, 0.5));
SELECT '#2117', ST_AsEWKT(ST_PointOnSurface('SRID=3395;MULTIPOLYGON M EMPTY'::geometry));
+SELECT 'pointonsurface_mixed_empty_multipoint', ST_AsEWKT(ST_PointOnSurface('SRID=4326;MULTIPOINT(EMPTY,2 1,2 4,4 5)'::geometry));
SELECT '#2110.1', 'POINT(0 0)'::geometry = 'POINT EMPTY'::geometry;
SELECT '#2110.2', 'POINT EMPTY'::geometry = 'POINT EMPTY'::geometry;
diff --git a/regress/core/tickets_expected b/regress/core/tickets_expected
index f6b6ec305c..64bb5c8a54 100644
--- a/regress/core/tickets_expected
+++ b/regress/core/tickets_expected
@@ -235,6 +235,7 @@ CURVEPOLYGON(COMPOUNDCURVE((1070163.61 711540.35,1070166.54 711523.82,1070164.14
#2112b|1|LINESTRING(1 1 1,1 0 1)
#2108|SRID=3395;POINTM EMPTY
#2117|SRID=3395;POINTM EMPTY
+pointonsurface_mixed_empty_multipoint|SRID=4326;POINT(2 4)
#2110.1|f
#2110.2|t
#2110.3|t
-----------------------------------------------------------------------
Summary of changes:
.woodpecker/garden.yml | 18 +++++++++++++++---
liblwgeom/lwgeom_geos.c | 29 +++++++++++++++++++++++++++--
regress/core/tickets.sql | 1 +
regress/core/tickets_expected | 1 +
4 files changed, 44 insertions(+), 5 deletions(-)
hooks/post-receive
--
PostGIS
More information about the postgis-tickets
mailing list