mirror of
https://git.osgeo.org/gitea/postgis/postgis
synced 2024-10-23 00:22:38 +00:00
Fix leak in lwcurvepoly_from_wkb_state
Closes #4534 Closes https://github.com/postgis/postgis/pull/492 git-svn-id: http://svn.osgeo.org/postgis/trunk@17892 b70326c6-7e19-0410-871a-916f4a2858ee
This commit is contained in:
parent
a25d5c41ee
commit
a1b82509e4
11
NEWS
11
NEWS
|
@ -1,3 +1,14 @@
|
|||
PostGIS 3.0.0rc2
|
||||
2019/10/XX
|
||||
|
||||
For full changes and enhancements, refer to PostGIS 3.0.0.
|
||||
This version requires PostgreSQL 9.5+-12 and GEOS >= 3.6+
|
||||
Additional features enabled if you are running Proj6+ and PostgreSQL 12
|
||||
Additional performance enhancements if running GEOS 3.8+
|
||||
|
||||
* Major highlights *
|
||||
- #4534, Fix leak in lwcurvepoly_from_wkb_state (Raúl Marín)
|
||||
|
||||
PostGIS 3.0.0rc1
|
||||
2019/10/08
|
||||
|
||||
|
|
|
@ -227,6 +227,15 @@ static void test_wkb_in_malformed(void)
|
|||
cu_wkb_malformed_in("01060000C00100000001030000C00100000003000000E3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFFE3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFFE3D9107E234F5041A3DB66BC97A30F4122ACEF440DAF9440FFFFFFFFFFFFEFFF");
|
||||
}
|
||||
|
||||
static void
|
||||
test_wkb_leak(void)
|
||||
{
|
||||
/* OSS-FUZZ https://trac.osgeo.org/postgis/ticket/4534 */
|
||||
uint8_t wkb[36] = {000, 000, 000, 000, 015, 000, 000, 000, 003, 000, 200, 000, 000, 010, 000, 000, 000, 000,
|
||||
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);
|
||||
}
|
||||
|
||||
/*
|
||||
** Used by test harness to register the tests in this file.
|
||||
|
@ -248,4 +257,5 @@ void wkb_in_suite_setup(void)
|
|||
PG_ADD_TEST(suite, test_wkb_in_multicurve);
|
||||
PG_ADD_TEST(suite, test_wkb_in_multisurface);
|
||||
PG_ADD_TEST(suite, test_wkb_in_malformed);
|
||||
PG_ADD_TEST(suite, test_wkb_leak);
|
||||
}
|
||||
|
|
|
@ -84,6 +84,7 @@ int lwcurvepoly_add_ring(LWCURVEPOLY *poly, LWGEOM *ring)
|
|||
{
|
||||
LWDEBUG(4,"mismatched nrings/maxrings");
|
||||
lwerror("Curvepolygon is in inconsistent state. Null memory but non-zero collection counts.");
|
||||
return LW_FAILURE;
|
||||
}
|
||||
|
||||
/* Check that we're adding an allowed ring type */
|
||||
|
|
|
@ -618,7 +618,12 @@ static LWCURVEPOLY* lwcurvepoly_from_wkb_state(wkb_parse_state *s)
|
|||
{
|
||||
geom = lwgeom_from_wkb_state(s);
|
||||
if ( lwcurvepoly_add_ring(cp, geom) == LW_FAILURE )
|
||||
{
|
||||
lwgeom_free(geom);
|
||||
lwgeom_free((LWGEOM *)cp);
|
||||
lwerror("Unable to add geometry (%p) to curvepoly (%p)", geom, cp);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return cp;
|
||||
|
|
Loading…
Reference in a new issue