1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-11 20:28:21 +03:00

Defend against nulls-in-arrays in contrib/intarray. I may have put in

more tests than strictly necessary, but did not feel like tracing call
paths in detail ...
This commit is contained in:
Tom Lane
2005-11-19 03:00:09 +00:00
parent 25c00833cb
commit 8ef289dba1
6 changed files with 131 additions and 44 deletions

View File

@ -66,6 +66,8 @@ _intbig_overlap(GISTTYPE * a, ArrayType *b)
int num = ARRNELEMS(b);
int4 *ptr = ARRPTR(b);
CHECKARRVALID(b);
while (num--)
{
if (GETBIT(GETSIGN(a), HASHVAL(*ptr)))
@ -82,6 +84,8 @@ _intbig_contains(GISTTYPE * a, ArrayType *b)
int num = ARRNELEMS(b);
int4 *ptr = ARRPTR(b);
CHECKARRVALID(b);
while (num--)
{
if (!GETBIT(GETSIGN(a), HASHVAL(*ptr)))
@ -136,10 +140,17 @@ g_intbig_compress(PG_FUNCTION_ARGS)
int num;
GISTTYPE *res = (GISTTYPE *) palloc(CALCGTSIZE(0));
ARRISVOID(in);
ptr = ARRPTR(in);
num = ARRNELEMS(in);
CHECKARRVALID(in);
if (ARRISVOID(in))
{
ptr = NULL;
num = 0;
}
else
{
ptr = ARRPTR(in);
num = ARRNELEMS(in);
}
memset(res, 0, CALCGTSIZE(0));
res->len = CALCGTSIZE(0);
@ -492,6 +503,7 @@ g_intbig_consistent(PG_FUNCTION_ARGS)
}
/* XXX what about toasted input? */
CHECKARRVALID(query);
if (ARRISVOID(query))
return FALSE;
@ -510,6 +522,8 @@ g_intbig_consistent(PG_FUNCTION_ARGS)
BITVECP dq,
de;
CHECKARRVALID(query);
memset(qp, 0, sizeof(BITVEC));
while (num--)
@ -546,6 +560,8 @@ g_intbig_consistent(PG_FUNCTION_ARGS)
BITVECP dq,
de;
CHECKARRVALID(query);
memset(qp, 0, sizeof(BITVEC));
while (num--)