diff options
| author | Tom Lane | 2022-08-15 19:40:07 +0000 |
|---|---|---|
| committer | Tom Lane | 2022-08-15 19:40:07 +0000 |
| commit | 2a280832e1d0d79bfcaf7f394d9ead6880985032 (patch) | |
| tree | e01fe368aa007774ade69c8841629fc3800c0bad /src | |
| parent | 1a05596eaaaaaa1e5596ef4c020a75ffaa762e32 (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
Diffstat (limited to 'src')
| -rw-r--r-- | src/interfaces/libpq/fe-exec.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c index 916eb45d4a8..41b2fcd9f5f 100644 --- a/src/interfaces/libpq/fe-exec.c +++ b/src/interfaces/libpq/fe-exec.c @@ -3221,6 +3221,8 @@ PQsetnonblocking(PGconn *conn, int arg) int PQisnonblocking(const PGconn *conn) { + if (!conn || conn->status == CONNECTION_BAD) + return false; return pqIsnonblocking(conn); } @@ -3240,6 +3242,8 @@ PQisthreadsafe(void) int PQflush(PGconn *conn) { + if (!conn || conn->status == CONNECTION_BAD) + return -1; return pqFlush(conn); } |
