Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit dce92e5

Browse files
committed
libpq: Correct processing of startup response messages
After sending a startup message, libpq expects either an error response ('E') or an authentication request ('R'). Before processing the message, it ensures it has read enough bytes to correspond to the length specified in the message. However, when processing the 'R' message, if an EOF status is returned it loops back waiting for more input, even though we already checked that we have enough input. In this particular case, this is probably not reachable anyway, because other code ensures we have enough bytes for an authentication request message, but the code is wrong and misleading. In the more general case, processing a faulty message could result in an EOF status, which would then result in an infinite loop waiting for the end of a message that will never come. The correction is to make this an error. Reported-by: Jacob Champion <jchampion@timescale.com> Discussion: https://www.postgresql.org/message-id/flat/f9c7862f-b864-8ef7-a861-c4638c83e209@enterprisedb.com
1 parent 3d0c95b commit dce92e5

File tree

1 file changed

+1
-2
lines changed

1 file changed

+1
-2
lines changed

src/interfaces/libpq/fe-connect.c

+1-2
Original file line numberDiff line numberDiff line change
@@ -3358,8 +3358,7 @@ PQconnectPoll(PGconn *conn)
33583358
/* Get the type of request. */
33593359
if (pqGetInt((int *) &areq, 4, conn))
33603360
{
3361-
/* We'll come back when there are more data */
3362-
return PGRES_POLLING_READING;
3361+
goto error_return;
33633362
}
33643363
msgLength -= 4;
33653364

0 commit comments

Comments
 (0)