*** a/src/backend/utils/adt/arrayfuncs.c
--- b/src/backend/utils/adt/arrayfuncs.c
***************
*** 1213,1229 **** array_recv(PG_FUNCTION_ARGS)
  
  	for (i = 0; i < ndim; i++)
  	{
- 		int			ub;
- 
  		dim[i] = pq_getmsgint(buf, 4);
  		lBound[i] = pq_getmsgint(buf, 4);
  
! 		ub = lBound[i] + dim[i] - 1;
! 		/* overflow? */
! 		if (lBound[i] > ub)
! 			ereport(ERROR,
! 					(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
! 					 errmsg("integer out of range")));
  	}
  
  	/* This checks for overflow of array dimensions */
--- 1213,1230 ----
  
  	for (i = 0; i < ndim; i++)
  	{
  		dim[i] = pq_getmsgint(buf, 4);
  		lBound[i] = pq_getmsgint(buf, 4);
  
! 		/* check overflow of upper bound */
! 		if (dim[i] != 0)
! 		{
! 			int ub = lBound[i] + dim[i] - 1;
! 			if (lBound[i] > ub)
! 				ereport(ERROR,
! 						(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
! 						 errmsg("integer out of range")));
! 		}
  	}
  
  	/* This checks for overflow of array dimensions */
