| Server IP : 82.208.35.60 / Your IP : 216.73.216.89 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /usr/ports/databases/pgsphere/files/ |
Upload File : |
--- 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);
}