|
8 | 8 | * |
9 | 9 | * |
10 | 10 | * IDENTIFICATION |
11 | | - * $PostgreSQL: pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.164 2010/02/26 02:01:07 momjian Exp $ |
| 11 | + * $PostgreSQL: pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.165 2010/08/11 19:12:27 heikki Exp $ |
12 | 12 | * |
13 | 13 | *------------------------------------------------------------------------- |
14 | 14 | */ |
@@ -1213,17 +1213,21 @@ array_recv(PG_FUNCTION_ARGS) |
1213 | 1213 |
|
1214 | 1214 | for (i=0;i<ndim;i++) |
1215 | 1215 | { |
1216 | | -intub; |
1217 | | - |
1218 | 1216 | dim[i]=pq_getmsgint(buf,4); |
1219 | 1217 | lBound[i]=pq_getmsgint(buf,4); |
1220 | 1218 |
|
1221 | | -ub=lBound[i]+dim[i]-1; |
1222 | | -/* overflow? */ |
1223 | | -if (lBound[i]>ub) |
1224 | | -ereport(ERROR, |
1225 | | -(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), |
1226 | | -errmsg("integer out of range"))); |
| 1219 | +/* |
| 1220 | + * Check overflow of upper bound. (ArrayNItems() below checks that |
| 1221 | + * dim[i] >= 0) |
| 1222 | + */ |
| 1223 | +if (dim[i]!=0) |
| 1224 | +{ |
| 1225 | +intub=lBound[i]+dim[i]-1; |
| 1226 | +if (lBound[i]>ub) |
| 1227 | +ereport(ERROR, |
| 1228 | +(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), |
| 1229 | +errmsg("integer out of range"))); |
| 1230 | +} |
1227 | 1231 | } |
1228 | 1232 |
|
1229 | 1233 | /* This checks for overflow of array dimensions */ |
|