summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2022-08-15 19:40:07 +0000
committerTom Lane2022-08-15 19:40:07 +0000
commitee4a17e200b72286c3a02cf6c572836652df2541 (patch)
treecc6701381109a0d0b3ea35f26367319a6fe46684
parent6e086bb1dbeb65598a2775df2611c67e8c58bf27 (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.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index 93c334b380e..2876b71a369 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);
}