diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index 438c3d0..ced41f0 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -2235,7 +2235,7 @@ array_set(ArrayType *array, /* * OK, create the new array and fill in header/dimensions */ - newarray = (ArrayType *) palloc0(newsize); + newarray = (ArrayType *) palloc(newsize); SET_VARSIZE(newarray, newsize); newarray->ndim = ndim; newarray->dataoffset = newhasnulls ? overheadlen : 0; @@ -2250,8 +2250,12 @@ array_set(ArrayType *array, (char *) array + oldoverheadlen, lenbefore); if (!isNull) + { + /* zero out any padding in the slot reserved for the new item */ + memset((char *) newarray + overheadlen + lenbefore, 0, newitemlen); ArrayCastAndSet(dataValue, elmlen, elmbyval, elmalign, (char *) newarray + overheadlen + lenbefore); + } memcpy((char *) newarray + overheadlen + lenbefore + newitemlen, (char *) array + oldoverheadlen + lenbefore + olditemlen, lenafter);