mirror of
https://github.com/postgres/postgres.git
synced 2025-06-30 21:42:05 +03:00
Add positive defense against trying to connect when the connection
option state hasn't been fully set up. This is possible via PQreset() and might occur in other code paths too, so a state flag seems the most robust solution. Per report from Arturs Zoldners.
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.325 2006/01/11 08:43:13 neilc Exp $
|
||||
* $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.326 2006/02/13 22:33:57 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -505,6 +505,13 @@ connectOptions2(PGconn *conn)
|
||||
else
|
||||
conn->sslmode = strdup(DefaultSSLMode);
|
||||
|
||||
/*
|
||||
* Only if we get this far is it appropriate to try to connect.
|
||||
* (We need a state flag, rather than just the boolean result of
|
||||
* this function, in case someone tries to PQreset() the PGconn.)
|
||||
*/
|
||||
conn->options_valid = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -729,6 +736,9 @@ connectDBStart(PGconn *conn)
|
||||
if (!conn)
|
||||
return 0;
|
||||
|
||||
if (!conn->options_valid)
|
||||
goto connect_errReturn;
|
||||
|
||||
/* Ensure our buffers are empty */
|
||||
conn->inStart = conn->inCursor = conn->inEnd = 0;
|
||||
conn->outCount = 0;
|
||||
@ -1814,6 +1824,8 @@ makeEmptyPGconn(void)
|
||||
conn->status = CONNECTION_BAD;
|
||||
conn->asyncStatus = PGASYNC_IDLE;
|
||||
conn->xactStatus = PQTRANS_IDLE;
|
||||
conn->options_valid = false;
|
||||
conn->nonblocking = false;
|
||||
conn->setenv_state = SETENV_STATE_IDLE;
|
||||
conn->client_encoding = PG_SQL_ASCII;
|
||||
conn->verbosity = PQERRORS_DEFAULT;
|
||||
@ -1838,7 +1850,6 @@ makeEmptyPGconn(void)
|
||||
conn->inBuffer = (char *) malloc(conn->inBufSize);
|
||||
conn->outBufSize = 16 * 1024;
|
||||
conn->outBuffer = (char *) malloc(conn->outBufSize);
|
||||
conn->nonblocking = FALSE;
|
||||
initPQExpBuffer(&conn->errorMessage);
|
||||
initPQExpBuffer(&conn->workBuffer);
|
||||
|
||||
|
Reference in New Issue
Block a user