From aaf997bd831028ce9d4d4d572290c042c1cabdc6 Mon Sep 17 00:00:00 2001 From: kbowling Date: Sun, 13 Sep 2020 03:19:20 +0000 Subject: [PATCH] databases/pgsphere: stop using VLAs to fix PG12 compilation PR: 248657 Reported by: vvd@unislabs.com Obtained from: https://github.com/akorotkov/pgsphere/pull/14 Sponsored by: BBOX.io git-svn-id: svn+ssh://svn.freebsd.org/ports/head@548447 35697150-7ecd-e111-bb59-0022644237b5 --- databases/pgsphere/Makefile | 2 +- databases/pgsphere/files/patch-path.c | 25 +++++++++++ databases/pgsphere/files/patch-polygon.c | 54 ++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 databases/pgsphere/files/patch-path.c create mode 100644 databases/pgsphere/files/patch-polygon.c diff --git a/databases/pgsphere/Makefile b/databases/pgsphere/Makefile index 472f38d10be07..bdf0df311287b 100644 --- a/databases/pgsphere/Makefile +++ b/databases/pgsphere/Makefile @@ -3,7 +3,7 @@ PORTNAME= pgsphere PORTVERSION= 1.1.5 -PORTREVISION= 3 +PORTREVISION= 4 CATEGORIES= databases geography MAINTAINER= sunpoet@FreeBSD.org diff --git a/databases/pgsphere/files/patch-path.c b/databases/pgsphere/files/patch-path.c new file mode 100644 index 0000000000000..c4f4e14171c8a --- /dev/null +++ b/databases/pgsphere/files/patch-path.c @@ -0,0 +1,25 @@ +--- path.c.orig 2019-10-30 10:18:38 UTC ++++ path.c +@@ -513,13 +513,21 @@ spherepath_in(PG_FUNCTION_ARGS) + nelem = get_path_count(); + if (nelem > 1) + { +- SPoint arr[nelem]; ++ SPoint* arr = (SPoint*)malloc(nelem*sizeof(SPoint)); ++ if (arr == NULL) { ++ reset_buffer(); ++ elog(ERROR, "spherepath_in: could not allocate array"); ++ PG_RETURN_NULL(); ++ } + + for (i = 0; i < nelem; i++) + { + get_path_elem(i, &arr[i].lng, &arr[i].lat); + } + path = spherepath_from_array(&arr[0], nelem); ++ ++ //free array ++ free(arr); + } + else + { diff --git a/databases/pgsphere/files/patch-polygon.c b/databases/pgsphere/files/patch-polygon.c new file mode 100644 index 0000000000000..15ff051fe4395 --- /dev/null +++ b/databases/pgsphere/files/patch-polygon.c @@ -0,0 +1,54 @@ +--- polygon.c.orig 2019-10-30 10:18:38 UTC ++++ polygon.c +@@ -824,13 +824,21 @@ spherepoly_in(PG_FUNCTION_ARGS) + nelem = get_path_count(); + if (nelem > 2) + { +- SPoint arr[nelem]; ++ // allocate arr ++ SPoint* arr = (SPoint *)malloc(nelem * sizeof(SPoint)); ++ if (arr == NULL) { ++ reset_buffer(); ++ elog(ERROR, "spherepoly_in: Could not allocate array."); ++ PG_RETURN_NULL(); ++ } + + for (i = 0; i < nelem; i++) + { + get_path_elem(i, &arr[i].lng, &arr[i].lat); + } + poly = spherepoly_from_array(&arr[0], nelem); ++ // free allocated array ++ free(arr); + } + else + { +@@ -892,11 +900,17 @@ spherepoly_area(PG_FUNCTION_ARGS) + { + SPOLY *poly = PG_GETARG_SPOLY(0); + int32 i; +- SPoint s[poly->npts + 2]; ++ SPoint *s = (SPoint*)malloc((poly->npts+2)*sizeof(SPoint)); ++ //SPoint s[poly->npts + 2]; + SPoint stmp[2]; + SEuler se; + float8 sum = 0.0; + ++ if (s == NULL) { ++ elog(ERROR, "spherepoly_area: Could not allocate array."); ++ PG_RETURN_NULL(); ++ } ++ + memcpy((void *) &s[1], + (void *) &poly->p[0], + poly->npts * sizeof(SPoint)); +@@ -935,6 +949,9 @@ spherepoly_area(PG_FUNCTION_ARGS) + { + sum = 0.0; + } ++ ++ // free array ++ free(s); + + PG_RETURN_FLOAT8(sum); + }