aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/arrayfuncs.c
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2010-08-11 19:12:27 +0000
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2010-08-11 19:12:27 +0000
commitc9ae257e232ab9256bdf867ab9da570c4ab6f10a (patch)
treecd507283e13ab03397114b2369f5070b263b0c7a /src/backend/utils/adt/arrayfuncs.c
parent741396936ed79bb8ce9d6feeb3015e1129de8239 (diff)
downloadpostgresql-c9ae257e232ab9256bdf867ab9da570c4ab6f10a.tar.gz
postgresql-c9ae257e232ab9256bdf867ab9da570c4ab6f10a.zip
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/adt/arrayfuncs.c')
-rw-r--r--src/backend/utils/adt/arrayfuncs.c22
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..02e7a814e99 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.165 2010/08/11 19:12:27 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 */