diff options
author | Andres Freund <andres@anarazel.de> | 2016-03-08 14:59:29 -0800 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2016-03-08 14:59:29 -0800 |
commit | 8457c69feaf572a2d3025e47b6bed92bb8cb719b (patch) | |
tree | 186db5b291a03b0f7ac34c9431fabbcd84149fe0 /contrib/ltree/_ltree_gist.c | |
parent | 6041d388c40a23ee0e7b313baeceb8998eed54bf (diff) | |
download | postgresql-8457c69feaf572a2d3025e47b6bed92bb8cb719b.tar.gz postgresql-8457c69feaf572a2d3025e47b6bed92bb8cb719b.zip |
ltree: Zero padding bytes when allocating memory for externally visible data.
ltree/ltree_gist/ltxtquery's headers stores data at MAXALIGN alignment,
requiring some padding bytes. So far we left these uninitialized. Zero
those by using palloc0.
Author: Andres Freund
Reported-By: Andres Freund / valgrind / buildarm animal skink
Backpatch: 9.1-
Diffstat (limited to 'contrib/ltree/_ltree_gist.c')
-rw-r--r-- | contrib/ltree/_ltree_gist.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/contrib/ltree/_ltree_gist.c b/contrib/ltree/_ltree_gist.c index 41be68d7ee6..9272618f8c0 100644 --- a/contrib/ltree/_ltree_gist.c +++ b/contrib/ltree/_ltree_gist.c @@ -85,7 +85,7 @@ _ltree_compress(PG_FUNCTION_ARGS) (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), errmsg("array must not contain nulls"))); - key = (ltree_gist *) palloc(len); + key = (ltree_gist *) palloc0(len); SET_VARSIZE(key, len); key->flag = 0; @@ -116,7 +116,7 @@ _ltree_compress(PG_FUNCTION_ARGS) PG_RETURN_POINTER(retval); } len = LTG_HDRSIZE; - key = (ltree_gist *) palloc(len); + key = (ltree_gist *) palloc0(len); SET_VARSIZE(key, len); key->flag = LTG_ALLTRUE; @@ -196,7 +196,7 @@ _ltree_union(PG_FUNCTION_ARGS) } len = LTG_HDRSIZE + ((flag & LTG_ALLTRUE) ? 0 : ASIGLEN); - result = (ltree_gist *) palloc(len); + result = (ltree_gist *) palloc0(len); SET_VARSIZE(result, len); result->flag = flag; if (!LTG_ISALLTRUE(result)) @@ -333,26 +333,26 @@ _ltree_picksplit(PG_FUNCTION_ARGS) /* form initial .. */ if (LTG_ISALLTRUE(GETENTRY(entryvec, seed_1))) { - datum_l = (ltree_gist *) palloc(LTG_HDRSIZE); + datum_l = (ltree_gist *) palloc0(LTG_HDRSIZE); SET_VARSIZE(datum_l, LTG_HDRSIZE); datum_l->flag = LTG_ALLTRUE; } else { - datum_l = (ltree_gist *) palloc(LTG_HDRSIZE + ASIGLEN); + datum_l = (ltree_gist *) palloc0(LTG_HDRSIZE + ASIGLEN); SET_VARSIZE(datum_l, LTG_HDRSIZE + ASIGLEN); datum_l->flag = 0; memcpy((void *) LTG_SIGN(datum_l), (void *) LTG_SIGN(GETENTRY(entryvec, seed_1)), sizeof(ABITVEC)); } if (LTG_ISALLTRUE(GETENTRY(entryvec, seed_2))) { - datum_r = (ltree_gist *) palloc(LTG_HDRSIZE); + datum_r = (ltree_gist *) palloc0(LTG_HDRSIZE); SET_VARSIZE(datum_r, LTG_HDRSIZE); datum_r->flag = LTG_ALLTRUE; } else { - datum_r = (ltree_gist *) palloc(LTG_HDRSIZE + ASIGLEN); + datum_r = (ltree_gist *) palloc0(LTG_HDRSIZE + ASIGLEN); SET_VARSIZE(datum_r, LTG_HDRSIZE + ASIGLEN); datum_r->flag = 0; memcpy((void *) LTG_SIGN(datum_r), (void *) LTG_SIGN(GETENTRY(entryvec, seed_2)), sizeof(ABITVEC)); |