aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2007-12-18 00:04:08 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2007-12-18 00:04:08 +0000
commitdbc632eb37e33c88345b84aa489514d5b3bb38cf (patch)
tree6aa8c54ff59930de61f02478e70988f71a16270b
parentcc04aaf9de48cc6246190b96310a669166cff29a (diff)
downloadpostgresql-dbc632eb37e33c88345b84aa489514d5b3bb38cf.tar.gz
postgresql-dbc632eb37e33c88345b84aa489514d5b3bb38cf.zip
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.
-rw-r--r--src/backend/utils/adt/geo_ops.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/backend/utils/adt/geo_ops.c b/src/backend/utils/adt/geo_ops.c
index b2e603a46af..ec21c59dff9 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.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)
closed = pq_getmsgbyte(buf);
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,
(errcode(ERRCODE_INVALID_BINARY_REPRESENTATION),
errmsg("invalid number of points in external \"path\" value")));
@@ -3484,7 +3484,7 @@ poly_recv(PG_FUNCTION_ARGS)
int size;
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,
(errcode(ERRCODE_INVALID_BINARY_REPRESENTATION),
errmsg("invalid number of points in external \"polygon\" value")));