• Tom Lane's avatar
    Ensure we discard unread/unsent data when abandoning a connection attempt. · 724e30c9
    Tom Lane authored
    There are assorted situations wherein PQconnectPoll() will abandon a
    connection attempt and try again with different parameters (eg, SSL versus
    not SSL).  However, the code forgot to discard any pending data in libpq's
    I/O buffers when doing this.  In at least one case (server returns E
    message during SSL negotiation), there is unread input data which bollixes
    the next connection attempt.  I have not checked to see whether this is
    possible in the other cases where we close the socket and retry, but it
    seems like a matter of good defensive programming to add explicit
    buffer-flushing code to all of them.
    
    This is one of several issues exposed by Daniel Farina's report of
    misbehavior after a server-side fork failure.
    
    This has been wrong since forever, so back-patch to all supported branches.
    724e30c9
fe-connect.c 122 KB