[postgis-tickets] r15620 - #3578, Fix null return for ST_NumInteriorRings on empty polygon

Daniel Baston dbaston at gmail.com
Sun Sep 3 17:37:56 PDT 2017


Author: dbaston
Date: 2017-09-03 17:37:56 -0700 (Sun, 03 Sep 2017)
New Revision: 15620

Modified:
   trunk/postgis/lwgeom_ogc.c
   trunk/regress/tickets.sql
   trunk/regress/tickets_expected
Log:
#3578, Fix null return for ST_NumInteriorRings on empty polygon

Modified: trunk/postgis/lwgeom_ogc.c
===================================================================
--- trunk/postgis/lwgeom_ogc.c	2017-09-04 00:14:02 UTC (rev 15619)
+++ trunk/postgis/lwgeom_ogc.c	2017-09-04 00:37:56 UTC (rev 15620)
@@ -413,19 +413,32 @@
 {
 	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);

Modified: trunk/regress/tickets.sql
===================================================================
--- trunk/regress/tickets.sql	2017-09-04 00:14:02 UTC (rev 15619)
+++ trunk/regress/tickets.sql	2017-09-04 00:37:56 UTC (rev 15620)
@@ -980,6 +980,10 @@
     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 (

Modified: trunk/regress/tickets_expected
===================================================================
--- trunk/regress/tickets_expected	2017-09-04 00:14:02 UTC (rev 15619)
+++ trunk/regress/tickets_expected	2017-09-04 00:37:56 UTC (rev 15620)
@@ -296,6 +296,8 @@
 #3470|t
 #3470b|50
 #3569|BOX(1 2,3 4)
+#3578a|0
+#3578b|0
 #3579|f|t
 #3620a|POINT(3 7)
 #3620b|POINT(2 8)



More information about the postgis-tickets mailing list