From: Tom Lane Date: Wed, 12 May 2004 22:38:44 +0000 (+0000) Subject: Tighten up overflow check in path_recv, pursuant to code review inspired X-Git-Tag: REL8_0_0BETA1~652 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4d924bdb462106f152b28ab7d66fcf5e5253e587;p=thirdparty%2Fpostgresql.git Tighten up overflow check in path_recv, pursuant to code review inspired by Ken Ashcraft's report. I think there is no actual bug here since if the int32 value does wrap a little bit, palloc will still reject it. Still it's better that the code be obviously correct. --- diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c index e962823e5a7..4236be5471f 100644 --- a/src/backend/utils/adt/geo_ops.c +++ b/src/backend/utils/adt/geo_ops.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/geo_ops.c,v 1.83 2003/11/29 19:51:58 pgsql Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/geo_ops.c,v 1.84 2004/05/12 22:38:44 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1383,7 +1383,7 @@ path_recv(PG_FUNCTION_ARGS) closed = pq_getmsgbyte(buf); npts = pq_getmsgint(buf, sizeof(int32)); - if (npts < 0 || npts >= (int32) (INT_MAX / sizeof(Point))) + if (npts < 0 || npts >= (int32) ((INT_MAX - offsetof(PATH, p[0])) / sizeof(Point))) ereport(ERROR, (errcode(ERRCODE_INVALID_BINARY_REPRESENTATION), errmsg("invalid number of points in external \"path\" value")));