Commit dbc632eb authored by Tom Lane's avatar Tom Lane

Make path_recv() and poly_recv() reject paths/polygons containing no points.

The zero-point case is sensible so far as the data structure is concerned,
so maybe we ought to allow it sometime; but right now the textual input
routines for these types don't allow it, and it seems that not all the
functions for the types are prepared to cope.
Report and patch by Merlin Moncure.
parent cc04aaf9
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/adt/geo_ops.c,v 1.97 2007/11/15 21:14:39 momjian Exp $ * $PostgreSQL: pgsql/src/backend/utils/adt/geo_ops.c,v 1.98 2007/12/18 00:04:08 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -1456,7 +1456,7 @@ path_recv(PG_FUNCTION_ARGS) ...@@ -1456,7 +1456,7 @@ path_recv(PG_FUNCTION_ARGS)
closed = pq_getmsgbyte(buf); closed = pq_getmsgbyte(buf);
npts = pq_getmsgint(buf, sizeof(int32)); npts = pq_getmsgint(buf, sizeof(int32));
if (npts < 0 || npts >= (int32) ((INT_MAX - offsetof(PATH, p[0])) / sizeof(Point))) if (npts <= 0 || npts >= (int32) ((INT_MAX - offsetof(PATH, p[0])) / sizeof(Point)))
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_BINARY_REPRESENTATION), (errcode(ERRCODE_INVALID_BINARY_REPRESENTATION),
errmsg("invalid number of points in external \"path\" value"))); errmsg("invalid number of points in external \"path\" value")));
...@@ -3484,7 +3484,7 @@ poly_recv(PG_FUNCTION_ARGS) ...@@ -3484,7 +3484,7 @@ poly_recv(PG_FUNCTION_ARGS)
int size; int size;
npts = pq_getmsgint(buf, sizeof(int32)); npts = pq_getmsgint(buf, sizeof(int32));
if (npts < 0 || npts >= (int32) ((INT_MAX - offsetof(POLYGON, p[0])) / sizeof(Point))) if (npts <= 0 || npts >= (int32) ((INT_MAX - offsetof(POLYGON, p[0])) / sizeof(Point)))
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_BINARY_REPRESENTATION), (errcode(ERRCODE_INVALID_BINARY_REPRESENTATION),
errmsg("invalid number of points in external \"polygon\" value"))); errmsg("invalid number of points in external \"polygon\" value")));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment