Commit d167fb10 authored by Tom Lane's avatar Tom Lane

Fix sanity-check code that mistakenly assumed error and notice messages

could never exceed 30K.  Per report from Andreas Pflug.
parent 36c9a01a
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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 @@ ...@@ -35,6 +35,15 @@
#endif #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 void handleSyncLoss(PGconn *conn, char id, int msgLength);
static int getRowDescriptions(PGconn *conn); static int getRowDescriptions(PGconn *conn);
static int getAnotherTuple(PGconn *conn, int msgLength); static int getAnotherTuple(PGconn *conn, int msgLength);
...@@ -83,8 +92,7 @@ pqParseInput3(PGconn *conn) ...@@ -83,8 +92,7 @@ pqParseInput3(PGconn *conn)
handleSyncLoss(conn, id, msgLength); handleSyncLoss(conn, id, msgLength);
return; return;
} }
if (msgLength > 30000 && if (msgLength > 30000 && !VALID_LONG_MESSAGE_TYPE(id))
!(id == 'T' || id == 'D' || id == 'd'))
{ {
handleSyncLoss(conn, id, msgLength); handleSyncLoss(conn, id, msgLength);
return; return;
...@@ -1257,8 +1265,7 @@ pqFunctionCall3(PGconn *conn, Oid fnid, ...@@ -1257,8 +1265,7 @@ pqFunctionCall3(PGconn *conn, Oid fnid,
handleSyncLoss(conn, id, msgLength); handleSyncLoss(conn, id, msgLength);
break; break;
} }
if (msgLength > 30000 && if (msgLength > 30000 && !VALID_LONG_MESSAGE_TYPE(id))
!(id == 'T' || id == 'D' || id == 'd' || id == 'V'))
{ {
handleSyncLoss(conn, id, msgLength); handleSyncLoss(conn, id, msgLength);
break; break;
......
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