]> granicus.if.org Git - postgresql/commitdiff
Make path_recv() and poly_recv() reject paths/polygons containing no points.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 18 Dec 2007 00:04:37 +0000 (00:04 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 18 Dec 2007 00:04:37 +0000 (00:04 +0000)
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.

src/backend/utils/adt/geo_ops.c

index 19de68af870925671b80c40a5849a9c9df08d1ad..4b59644664989e460b27ad66e12d94f226d700dc 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/geo_ops.c,v 1.82.2.1 2004/05/12 22:39:00 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/geo_ops.c,v 1.82.2.2 2007/12/18 00:04:37 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 - 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")));
@@ -3412,7 +3412,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")));