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);

