8000 ltree: Zero padding bytes when allocating memory for externally visib… · prmdeveloper/postgres@8145704 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8145704

Browse files
committed
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-
1 parent c5f1fbb commit 8145704

File tree

5 files changed

+20
-20
lines changed

5 files changed

+20
-20
lines changed

contrib/ltree/_ltree_gist.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ _ltree_compress(PG_FUNCTION_ARGS)
9797
(errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED),
9898
errmsg("array must not contain nulls")));
9999

100-
key = (ltree_gist *) palloc(len);
100+
key = (ltree_gist *) palloc0(len);
101101
SET_VARSIZE(key, len);
102102
key->flag = 0;
103103

@@ -128,7 +128,7 @@ _ltree_compress(PG_FUNCTION_ARGS)
128128
PG_RETURN_POINTER(retval);
129129
}
130130
len = LTG_HDRSIZE;
131-
key = (ltree_gist *) palloc(len);
131+
key = (ltree_gist *) palloc0(len);
132132
SET_VARSIZE(key, len);
133133
key->flag = LTG_ALLTRUE;
134134

@@ -208,7 +208,7 @@ _ltree_union(PG_FUNCTION_ARGS)
208208
}
209209

210210
len = LTG_HDRSIZE + ((flag & LTG_ALLTRUE) ? 0 : ASIGLEN);
211-
result = (ltree_gist *) palloc(len);
211+
result = (ltree_gist *) palloc0(len);
212212
SET_VARSIZE(result, len);
213213
result->flag = flag;
214214
if (!LTG_ISALLTRUE(result))
@@ -345,26 +345,26 @@ _ltree_picksplit(PG_FUNCTION_ARGS)
345345
/* form initial .. */
346346
if (LTG_ISALLTRUE(GETENTRY(entryvec, seed_1)))
347347
{
348-
datum_l = (ltree_gist *) palloc(LTG_HDRSIZE);
348+
datum_l = (ltree_gist *) palloc0(LTG_HDRSIZE);
349349
SET_VARSIZE(datum_l, LTG_HDRSIZE);
350350
datum_l->flag = LTG_ALLTRUE;
351351
}
352352
else
353353
{
354-
datum_l = (ltree_gist *) palloc(LTG_HDRSIZE + ASIGLEN);
354+
datum_l = (ltree_gist *) palloc0(LTG_HDRSIZE + ASIGLEN);
355355
SET_VARSIZE(datum_l, LTG_HDRSIZE + ASIGLEN);
356356
datum_l->flag = 0;
357357
memcpy((void *) LTG_SIGN(datum_l), (void *) LTG_SIGN(GETENTRY(entryvec, seed_1)), sizeof(ABITVEC));
358358
}
359359
if (LTG_ISALLTRUE(GETENTRY(entryvec, seed_2)))
360360
{
361-
datum_r = (ltree_gist *) palloc(LTG_HDRSIZE);
361+
datum_r = (ltree_gist *) palloc0(LTG_HDRSIZE);
362362
SET_VARSIZE(datum_r, LTG_HDRSIZE);
363363
datum_r->flag = LTG_ALLTRUE;
364364
}
365365
else
366366
{
367-
datum_r = (ltree_gist *) palloc(LTG_HDRSIZE + ASIGLEN);
367+
datum_r = (ltree_gist *) palloc0(LTG_HDRSIZE + ASIGLEN);
368368
SET_VARSIZE(datum_r, LTG_HDRSIZE + ASIGLEN);
369369
datum_r->flag = 0;
370370
memcpy((void *) LTG_SIGN(datum_r), (void *) LTG_SIGN(GETENTRY(entryvec, seed_2)), sizeof(ABITVEC));

contrib/ltree/_ltree_op.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ _ltree_extract_isparent(PG_FUNCTION_ARGS)
220220
PG_RETURN_NULL();
221221
}
222222

223-
item = (ltree *) palloc(VARSIZE(found));
223+
item = (ltree *) palloc0(VARSIZE(found));
224224
memcpy(item, found, VARSIZE(found));
225225

226226
PG_FREE_IF_COPY(la, 0);
@@ -243,7 +243,7 @@ _ltree_extract_risparent(PG_FUNCTION_ARGS)
243243
PG_RETURN_NULL();
244244
}
245245

246-
item = (ltree *) palloc(VARSIZE(found));
246+
item = (ltree *) palloc0(VARSIZE(found));
247247
memcpy(item, found, VARSIZE(found));
248248

249249
PG_FREE_IF_COPY(la, 0);
@@ -266,7 +266,7 @@ _ltq_extract_regex(PG_FUNCTION_ARGS)
266266
PG_RETURN_NULL();
267267
}
268268

269-
item = (ltree *) palloc(VARSIZE(found));
269+
item = (ltree *) palloc0(VARSIZE(found));
270270
memcpy(item, found, VARSIZE(found));
271271

272272
PG_FREE_IF_COPY(la, 0);
@@ -289,7 +289,7 @@ _ltxtq_extract_exec(PG_FUNCTION_ARGS)
289289
PG_RETURN_NULL();
290290
}
291291

292-
item = (ltree *) palloc(VARSIZE(found));
292+
item = (ltree *) palloc0(VARSIZE(found));
293293
memcpy(item, found, VARSIZE(found));
294294

295295
PG_FREE_IF_COPY(la, 0);

contrib/ltree/ltree_gist.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ ltree_compress(PG_FUNCTION_ARGS)
7474
ltree *val = (ltree *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
7575
int4 len = LTG_HDRSIZE + VARSIZE(val);
7676

77-
key = (ltree_gist *) palloc(len);
77+
key = (ltree_gist *) palloc0(len);
7878
SET_VARSIZE(key, len);
7979
key->flag = LTG_ONENODE;
8080
memcpy((void *) LTG_NODE(key), (void *) val, VARSIZE(val));
@@ -231,7 +231,7 @@ ltree_union(PG_FUNCTION_ARGS)
231231
isleqr = (left == right || ISEQ(left, right)) ? true : false;
232232
*size = LTG_HDRSIZE + ((isalltrue) ? 0 : SIGLEN) + VARSIZE(left) + ((isleqr) ? 0 : VARSIZE(right));
233233

234-
result = (ltree_gist *) palloc(*size);
234+
result = (ltree_gist *) palloc0(*size);
235235
SET_VARSIZE(result, *size);
236236
result->flag = 0;
237237

@@ -404,7 +404,7 @@ ltree_picksplit(PG_FUNCTION_ARGS)
404404
lu_l = LTG_GETLNODE(GETENTRY(entryvec, array[FirstOffsetNumber].index));
405405
isleqr = (lu_l == lu_r || ISEQ(lu_l, lu_r)) ? true : false;
406406
size = LTG_HDRSIZE + ((lisat) ? 0 : SIGLEN) + VARSIZE(lu_l) + ((isleqr) ? 0 : VARSIZE(lu_r));
407-
lu = (ltree_gist *) palloc(size);
407+
lu = (ltree_gist *) palloc0(size);
408408
SET_VARSIZE(lu, size);
409409
lu->flag = 0;
410410
if (lisat)
@@ -421,7 +421,7 @@ ltree_picksplit(PG_FUNCTION_ARGS)
421421
ru_l = LTG_GETLNODE(GETENTRY(entryvec, array[1 + ((maxoff - FirstOffsetNumber + 1) / 2)].index));
422422
isleqr = (ru_l == ru_r || ISEQ(ru_l, ru_r)) ? true : false;
423423
size = LTG_HDRSIZE + ((risat) ? 0 : SIGLEN) + VARSIZE(ru_l) + ((isleqr) ? 0 : VARSIZE(ru_r));
424-
ru = (ltree_gist *) palloc(size);
424+
ru = (ltree_gist *) palloc0(size);
425425
SET_VARSIZE(ru, size);
426426
ru->flag = 0;
427427
if (risat)
@@ -463,7 +463,7 @@ gist_isparent(ltree_gist *key, ltree *query)
463463
static ltree *
464464
copy_ltree(ltree *src)
465465
{
466-
ltree *dst = (ltree *) palloc(VARSIZE(src));
466+
ltree *dst = (ltree *) palloc0(VARSIZE(src));
467467

468468
memcpy(dst, src, VARSIZE(src));
469469
return dst;

contrib/ltree/ltree_op.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ inner_subltree(ltree *t, int4 startpos, int4 endpos)
230230
ptr = LEVEL_NEXT(ptr);
231231
}
232232

233-
res = (ltree *) palloc(LTREE_HDRSIZE + (end - start));
233+
res = (ltree *) palloc0(LTREE_HDRSIZE + (end - start));
234234
SET_VARSIZE(res, LTREE_HDRSIZE + (end - start));
235235
res->numlevel = endpos - startpos;
236236

@@ -287,7 +287,7 @@ ltree_concat(ltree *a, ltree *b)
287287
{
288288
ltree *r;
289289

290-
r = (ltree *) palloc(VARSIZE(a) + VARSIZE(b) - LTREE_HDRSIZE);
290+
r = (ltree *) palloc0(VARSIZE(a) + VARSIZE(b) - LTREE_HDRSIZE);
291291
SET_VARSIZE(r, VARSIZE(a) + VARSIZE(b) - LTREE_HDRSIZE);
292292
r->numlevel = a->numlevel + b->numlevel;
293293

@@ -469,7 +469,7 @@ lca_inner(ltree **a, int len)
469469
l1 = LEVEL_NEXT(l1);
470470
}
471471

472-
res = (ltree *) palloc(reslen);
472+
res = (ltree *) palloc0(reslen);
473473
SET_VARSIZE(res, reslen);
474474
res->numlevel = num;
475475

contrib/ltree/ltxtquery_io.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ queryin(char *buf)
354354
errmsg("ltxtquery is too large")));
355355
commonlen = COMPUTESIZE(state.num, state.sumlen);
356356

357-
query = (ltxtquery *) palloc(commonlen);
357+
query = (ltxtquery *) palloc0(commonlen);
358358
SET_VARSIZE(query, commonlen);
359359
query->size = state.num;
360360
ptr = GETQUERY(query);

0 commit comments

Comments
 (0)
0