Skip to content

Commit

Permalink
databases/pgsphere: stop using VLAs to fix PG12 compilation
Browse files Browse the repository at this point in the history
PR:		248657
Reported by:	[email protected]
Obtained from:	akorotkov/pgsphere#14
Sponsored by:	BBOX.io


git-svn-id: svn+ssh://svn.freebsd.org/ports/head@548447 35697150-7ecd-e111-bb59-0022644237b5
  • Loading branch information
kbowling committed Sep 13, 2020
1 parent 9861f8a commit aaf997b
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 1 deletion.
2 changes: 1 addition & 1 deletion databases/pgsphere/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

PORTNAME= pgsphere
PORTVERSION= 1.1.5
PORTREVISION= 3
PORTREVISION= 4
CATEGORIES= databases geography

MAINTAINER= [email protected]
Expand Down
25 changes: 25 additions & 0 deletions databases/pgsphere/files/patch-path.c
Original file line number Diff line number Diff line change
@@ -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
{
54 changes: 54 additions & 0 deletions databases/pgsphere/files/patch-polygon.c
Original file line number Diff line number Diff line change
@@ -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);
}

0 comments on commit aaf997b

Please sign in to comment.