[postgis-tickets] r17899 - Fix leak in lwcollection_from_wkb_state

Raul raul at rmr.ninja
Thu Oct 10 04:43:55 PDT 2019


Author: algunenano
Date: 2019-10-10 04:43:55 -0700 (Thu, 10 Oct 2019)
New Revision: 17899

Modified:
   branches/2.3/NEWS
   branches/2.3/liblwgeom/cunit/cu_in_wkb.c
   branches/2.3/liblwgeom/lwin_wkb.c
Log:
Fix leak in lwcollection_from_wkb_state

References #4536


Modified: branches/2.3/NEWS
===================================================================
--- branches/2.3/NEWS	2019-10-10 11:43:26 UTC (rev 17898)
+++ branches/2.3/NEWS	2019-10-10 11:43:55 UTC (rev 17899)
@@ -11,6 +11,7 @@
   - #4498, Restrict build for PgSQL > 9.6
   - #4519, Fix getSRIDbySRS crash (Raúl Marín)
   - #4534, Fix leak in lwcurvepoly_from_wkb_state (Raúl Marín)
+  - #4536, Fix leak in lwcollection_from_wkb_state (Raúl Marín)
 
 PostGIS 2.3.10
 2019/08/11

Modified: branches/2.3/liblwgeom/cunit/cu_in_wkb.c
===================================================================
--- branches/2.3/liblwgeom/cunit/cu_in_wkb.c	2019-10-10 11:43:26 UTC (rev 17898)
+++ branches/2.3/liblwgeom/cunit/cu_in_wkb.c	2019-10-10 11:43:55 UTC (rev 17899)
@@ -231,6 +231,27 @@
 			   000, 000, 000, 000, 010, 000, 000, 000, 000, 000, 000, 000, 000, 010, 000, 000, 000, 000};
 	LWGEOM *g = lwgeom_from_wkb(wkb, 36, LW_PARSER_CHECK_NONE);
 	lwgeom_free(g);
+
+	/* OSS-FUZZ https://trac.osgeo.org/postgis/ticket/4536 */
+	uint8_t wkb2[319] = {
+	    001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001,
+	    001, 001, 001, 001, 001, 012, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001,
+	    001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 051, 001, 001,
+	    001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001,
+	    001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 000, 115, 001, 001, 001, 001,
+	    001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 000, 001, 001, 001, 001, 001, 001, 001,
+	    001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001,
+	    001, 001, 001, 001, 001, 001, 000, 000, 000, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001,
+	    001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 002,
+	    001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001,
+	    001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 207, 001,
+	    001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001,
+	    001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 000, 000, 000, 000, 000,
+	    000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 000, 001, 001,
+	    001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001,
+	    001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001, 001};
+	g = lwgeom_from_wkb(wkb2, 319, LW_PARSER_CHECK_NONE);
+	lwgeom_free(g);
 }
 
 /*

Modified: branches/2.3/liblwgeom/lwin_wkb.c
===================================================================
--- branches/2.3/liblwgeom/lwin_wkb.c	2019-10-10 11:43:26 UTC (rev 17898)
+++ branches/2.3/liblwgeom/lwin_wkb.c	2019-10-10 11:43:55 UTC (rev 17899)
@@ -655,6 +655,8 @@
 		geom = lwgeom_from_wkb_state(s);
 		if ( lwcollection_add_lwgeom(col, geom) == NULL )
 		{
+			lwgeom_free(geom);
+			lwgeom_free((LWGEOM *)col);
 			lwerror("Unable to add geometry (%p) to collection (%p)", geom, col);
 			return NULL;
 		}



More information about the postgis-tickets mailing list