summaryrefslogtreecommitdiff
path: root/databases/pgsphere/files
diff options
context:
space:
mode:
authorKevin Bowling <kbowling@FreeBSD.org>2020-09-13 03:19:20 +0000
committerKevin Bowling <kbowling@FreeBSD.org>2020-09-13 03:19:20 +0000
commit238d925aae9c19070fe5982b9e12e6d62336b86e (patch)
tree0ca142f676c396e6a43aa328c91594f978a1ea64 /databases/pgsphere/files
parentgraphics/oidn: Update 1.1.0 -> 1.2.3 (diff)
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
Notes
Notes: svn path=/head/; revision=548447
Diffstat (limited to 'databases/pgsphere/files')
-rw-r--r--databases/pgsphere/files/patch-path.c25
-rw-r--r--databases/pgsphere/files/patch-polygon.c54
2 files changed, 79 insertions, 0 deletions
diff --git a/databases/pgsphere/files/patch-path.c b/databases/pgsphere/files/patch-path.c
new file mode 100644
index 000000000000..c4f4e14171c8
--- /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 000000000000..15ff051fe439
--- /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);
+ }