diff options
| author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2010-08-11 19:12:36 +0000 | 
|---|---|---|
| committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2010-08-11 19:12:36 +0000 | 
| commit | e286b85c90d2197b9eaa2dc6d0b2b67795ba7ab9 (patch) | |
| tree | b41520089db16aa1ebcc827364860db09e80a990 /src/backend/utils | |
| parent | 101096013e47fcfd75be42142ebeeb69c035d8af (diff) | |
The sanity check added to array_recv() wa a bit too tight; we must
continue to accept an empty array with dimension information. array_send()
can output such arrays.
Per report from Vladimir Shakhov.
Diffstat (limited to 'src/backend/utils')
| -rw-r--r-- | src/backend/utils/adt/arrayfuncs.c | 22 | 
1 files changed, 13 insertions, 9 deletions
diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index 533b77c1cd0..dd0fd227e7e 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -8,7 +8,7 @@   *   *   * IDENTIFICATION - *	  $PostgreSQL: pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.164 2010/02/26 02:01:07 momjian Exp $ + *	  $PostgreSQL: pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.164.4.1 2010/08/11 19:12:36 heikki Exp $   *   *-------------------------------------------------------------------------   */ @@ -1213,17 +1213,21 @@ 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"))); +		/* +		 * Check overflow of upper bound. (ArrayNItems() below checks that +		 * dim[i] >= 0) +		 */ +		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 */  | 
