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:
@ -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--)
|
||||
|
Reference in New Issue
Block a user