From: Sandro Santilli Date: Sat, 30 Sep 2017 17:59:54 +0000 (+0000) Subject: Fix memory leaks in BTREE operators X-Git-Tag: 2.5.0alpha~483 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=97fd8b3b0f40b47a87d6d793fe3bf6590855ebc6;p=postgis Fix memory leaks in BTREE operators References #3864 git-svn-id: http://svn.osgeo.org/postgis/trunk@15863 b70326c6-7e19-0410-871a-916f4a2858ee --- 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); }