From 0af2db58801ed9092b08b5b62b60832853d9a413 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Sun, 1 Oct 2017 18:31:56 +0000 Subject: [PATCH] Fix memory leaks in BTREE operators References #3864 for 2.4 branch git-svn-id: http://svn.osgeo.org/postgis/branches/2.4@15865 b70326c6-7e19-0410-871a-916f4a2858ee --- NEWS | 6 ++++++ postgis/lwgeom_btree.c | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index e16afcd09..ebe05ae1f 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +PostGIS 2.4.1dev +YYYY/MM/DD + + * Bug fixes * + - #3864, Fix memory leaks in BTREE operators + PostGIS 2.4.0 2017/09/30 diff --git a/postgis/lwgeom_btree.c b/postgis/lwgeom_btree.c index c21defa90..cfca3be4a 100644 --- a/postgis/lwgeom_btree.c +++ b/postgis/lwgeom_btree.c @@ -52,6 +52,8 @@ Datum lwgeom_lt(PG_FUNCTION_ARGS) GSERIALIZED *g1 = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *g2 = PG_GETARG_GSERIALIZED_P(1); int cmp = gserialized_cmp(g1, g2); + PG_FREE_IF_COPY(g1, 0); + PG_FREE_IF_COPY(g2, 1); if (cmp < 0) PG_RETURN_BOOL(TRUE); else @@ -64,6 +66,8 @@ Datum lwgeom_le(PG_FUNCTION_ARGS) GSERIALIZED *g1 = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *g2 = PG_GETARG_GSERIALIZED_P(1); int cmp = gserialized_cmp(g1, g2); + PG_FREE_IF_COPY(g1, 0); + PG_FREE_IF_COPY(g2, 1); if (cmp == 0) PG_RETURN_BOOL(TRUE); else @@ -76,6 +80,8 @@ Datum lwgeom_eq(PG_FUNCTION_ARGS) GSERIALIZED *g1 = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *g2 = PG_GETARG_GSERIALIZED_P(1); int cmp = gserialized_cmp(g1, g2); + PG_FREE_IF_COPY(g1, 0); + PG_FREE_IF_COPY(g2, 1); if (cmp == 0) PG_RETURN_BOOL(TRUE); else @@ -88,6 +94,8 @@ Datum lwgeom_ge(PG_FUNCTION_ARGS) GSERIALIZED *g1 = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *g2 = PG_GETARG_GSERIALIZED_P(1); int cmp = gserialized_cmp(g1, g2); + PG_FREE_IF_COPY(g1, 0); + PG_FREE_IF_COPY(g2, 1); if (cmp >= 0) PG_RETURN_BOOL(TRUE); else @@ -100,6 +108,8 @@ Datum lwgeom_gt(PG_FUNCTION_ARGS) GSERIALIZED *g1 = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *g2 = PG_GETARG_GSERIALIZED_P(1); int cmp = gserialized_cmp(g1, g2); + PG_FREE_IF_COPY(g1, 0); + PG_FREE_IF_COPY(g2, 1); if (cmp > 0) PG_RETURN_BOOL(TRUE); else @@ -111,6 +121,9 @@ Datum lwgeom_cmp(PG_FUNCTION_ARGS) { GSERIALIZED *g1 = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *g2 = PG_GETARG_GSERIALIZED_P(1); - PG_RETURN_INT32(gserialized_cmp(g1, g2)); + int ret = gserialized_cmp(g1, g2); + PG_FREE_IF_COPY(g1, 0); + PG_FREE_IF_COPY(g2, 1); + PG_RETURN_INT32(ret); } -- 2.50.1