{
GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
- LWPOLY *poly = NULL;
- LWCURVEPOLY *curvepoly = NULL;
+
int result = -1;
if ( lwgeom->type == POLYGONTYPE )
{
- poly = lwgeom_as_lwpoly(lwgeom);
- result = poly->nrings - 1;
+ if (lwgeom_is_empty(lwgeom))
+ {
+ result = 0;
+ }
+ else
+ {
+ const LWPOLY *poly = lwgeom_as_lwpoly(lwgeom);
+ result = poly->nrings - 1;
+ }
}
else if ( lwgeom->type == CURVEPOLYTYPE )
{
- curvepoly = lwgeom_as_lwcurvepoly(lwgeom);
- result = curvepoly->nrings - 1;
+ if (lwgeom_is_empty(lwgeom))
+ {
+ result = 0;
+ }
+ else
+ {
+ const LWCURVEPOLY *curvepoly = lwgeom_as_lwcurvepoly(lwgeom);
+ result = curvepoly->nrings - 1;
+ }
}
lwgeom_free(lwgeom);
SELECT '#3569', ST_CollectionHomogenize(geom)::box2d
FROM clustr;
+-- #3578
+SELECT '#3578a', ST_NumInteriorRings('POLYGON EMPTY');
+SELECT '#3578b', ST_NumInteriorRings('CURVEPOLYGON EMPTY');
+
-- #3579
with
params as (