diff options
author | Tom Lane | 2022-08-15 19:40:07 +0000 |
---|---|---|
committer | Tom Lane | 2022-08-15 19:40:07 +0000 |
commit | bb9237a1295a29c4e41b97f9d34e3922ac69c071 (patch) | |
tree | 549a27cf53db9a763db3203316165ee2e0ce0428 | |
parent | 1c5818b9c68e5c2ac8f19d372f24cce409de1a26 (diff) |
Add missing bad-PGconn guards in libpq entry points.
There's a convention that externally-visible libpq functions should
check for a NULL PGconn pointer, and fail gracefully instead of
crashing. PQflush() and PQisnonblocking() didn't get that memo
though. Also add a similar check to PQdefaultSSLKeyPassHook_OpenSSL;
while it's not clear that ordinary usage could reach that with a
null conn pointer, it's cheap enough to check, so let's be consistent.
Daniele Varrazzo and Tom Lane
Discussion: https://postgr.es/m/CA+mi_8Zm_mVVyW1iNFgyMd9Oh0Nv8-F+7Y3-BqwMgTMHuo_h2Q@mail.gmail.com
-rw-r--r-- | src/interfaces/libpq/fe-exec.c | 4 | ||||
-rw-r--r-- | src/interfaces/libpq/fe-secure-openssl.c | 2 |
2 files changed, 5 insertions, 1 deletions
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index a36f5eb310..bb874f7f50 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -3917,6 +3917,8 @@ PQsetnonblocking(PGconn *conn, int arg) int PQisnonblocking(const PGconn *conn) { + if (!conn || conn->status == CONNECTION_BAD) + return false; return pqIsnonblocking(conn); } @@ -3936,6 +3938,8 @@ PQisthreadsafe(void) int PQflush(PGconn *conn) { + if (!conn || conn->status == CONNECTION_BAD) + return -1; return pqFlush(conn); } diff --git a/src/interfaces/libpq/fe-secure-openssl.c b/src/interfaces/libpq/fe-secure-openssl.c index 8117cbd40f..3cc75380e0 100644 --- a/src/interfaces/libpq/fe-secure-openssl.c +++ b/src/interfaces/libpq/fe-secure-openssl.c @@ -1938,7 +1938,7 @@ err: int PQdefaultSSLKeyPassHook_OpenSSL(char *buf, int size, PGconn *conn) { - if (conn->sslpassword) + if (conn && conn->sslpassword) { if (strlen(conn->sslpassword) + 1 > size) fprintf(stderr, libpq_gettext("WARNING: sslpassword truncated\n")); |