--- a/src/backend/utils/adt/array_userfuncs.c
+++ b/src/backend/utils/adt/array_userfuncs.c
@@ -997,7 +997,7 @@
 			state1->data = (char *) repalloc(state1->data, state1->abytes);
 		}
 
-		if (state2->nullbitmap)
+		if (state1->nullbitmap || state2->nullbitmap)
 		{
 			int			newnitems = state1->nitems + state2->nitems;
 
@@ -1015,7 +1015,8 @@
 			}
 			else if (newnitems > state1->aitems)
 			{
-				int			newaitems = state1->aitems + state2->aitems;
+				int			newaitems = Max(state1->aitems + state2->aitems,
+										   newnitems);
 
 				state1->aitems = pg_nextpower2_32(newaitems);
 				state1->nullbitmap = (bits8 *)
