aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-12-28 17:43:57 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-12-28 17:43:57 +0000
commitd167fb10153a2f00c9a8b46df537a202f7755cb9 (patch)
treeb57417c44d7e3d0716dcf4701bde9ddfab01d97f /src
parent36c9a01acf0026614b4d3ac869962902e7138c62 (diff)
downloadpostgresql-d167fb10153a2f00c9a8b46df537a202f7755cb9.tar.gz
postgresql-d167fb10153a2f00c9a8b46df537a202f7755cb9.zip
Fix sanity-check code that mistakenly assumed error and notice messages
could never exceed 30K. Per report from Andreas Pflug.
Diffstat (limited to 'src')
-rw-r--r--src/interfaces/libpq/fe-protocol3.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/interfaces/libpq/fe-protocol3.c b/src/interfaces/libpq/fe-protocol3.c
index 4ed21a8d7aa..cfdd97cf737 100644
--- a/src/interfaces/libpq/fe-protocol3.c
+++ b/src/interfaces/libpq/fe-protocol3.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/interfaces/libpq/fe-protocol3.c,v 1.10 2003/11/29 19:52:12 pgsql Exp $
+ * $PostgreSQL: pgsql/src/interfaces/libpq/fe-protocol3.c,v 1.11 2003/12/28 17:43:57 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -35,6 +35,15 @@
#endif
+/*
+ * This macro lists the backend message types that could be "long" (more
+ * than a couple of kilobytes).
+ */
+#define VALID_LONG_MESSAGE_TYPE(id) \
+ ((id) == 'T' || (id) == 'D' || (id) == 'd' || (id) == 'V' || \
+ (id) == 'E' || (id) == 'N' || (id) == 'A')
+
+
static void handleSyncLoss(PGconn *conn, char id, int msgLength);
static int getRowDescriptions(PGconn *conn);
static int getAnotherTuple(PGconn *conn, int msgLength);
@@ -83,8 +92,7 @@ pqParseInput3(PGconn *conn)
handleSyncLoss(conn, id, msgLength);
return;
}
- if (msgLength > 30000 &&
- !(id == 'T' || id == 'D' || id == 'd'))
+ if (msgLength > 30000 && !VALID_LONG_MESSAGE_TYPE(id))
{
handleSyncLoss(conn, id, msgLength);
return;
@@ -1257,8 +1265,7 @@ pqFunctionCall3(PGconn *conn, Oid fnid,
handleSyncLoss(conn, id, msgLength);
break;
}
- if (msgLength > 30000 &&
- !(id == 'T' || id == 'D' || id == 'd' || id == 'V'))
+ if (msgLength > 30000 && !VALID_LONG_MESSAGE_TYPE(id))
{
handleSyncLoss(conn, id, msgLength);
break;