|
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 */
|
|