diff options
Diffstat (limited to 'src/backend/libpq')
| -rw-r--r-- | src/backend/libpq/pqcomm.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index d9dda21d93..b0406bba46 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -1131,19 +1131,22 @@ pq_getmessage(StringInfo s, int maxlen) * large message), we will elog(ERROR), but we want to discard the * message body so as not to lose communication sync. */ - PG_TRY(); + if (!isStringInfoLargeEnough(s, len)) { - enlargeStringInfo(s, len); - } - PG_CATCH(); - { - if (pq_discardbytes(len) == EOF) - ereport(COMMERROR, - (errcode(ERRCODE_PROTOCOL_VIOLATION), - errmsg("incomplete message from client"))); - PG_RE_THROW(); + PG_TRY(); + { + enlargeStringInfo(s, len); + } + PG_CATCH(); + { + if (pq_discardbytes(len) == EOF) + ereport(COMMERROR, + (errcode(ERRCODE_PROTOCOL_VIOLATION), + errmsg("incomplete message from client"))); + PG_RE_THROW(); + } + PG_END_TRY(); } - PG_END_TRY(); /* And grab the message */ if (pq_getbytes(s->data, len) == EOF) |
