diff options
author | Michael Paquier <michael@paquier.xyz> | 2025-07-22 14:00:05 +0900 |
---|---|---|
committer | Michael Paquier <michael@paquier.xyz> | 2025-07-22 14:00:05 +0900 |
commit | 2805e1c1edd5f5c59d40f85f8a32d26f9ccb10a6 (patch) | |
tree | 161de88bc810c42d7c0bff01fa9e1a5a0b0dc6f3 | |
parent | 6b755d8d70b2ceffeb4798cbb6907d2704c2e6c4 (diff) |
ecpg: Fix NULL pointer dereference during connection lookup
ECPGconnect() caches established connections to the server, supporting
the case of a NULL connection name when a database name is not specified
by its caller.
A follow-up call to ECPGget_PGconn() to get an established connection
from the cached set with a non-NULL name could cause a NULL pointer
dereference if a NULL connection was listed in the cache and checked for
a match. At least two connections are necessary to reproduce the issue:
one with a NULL name and one with a non-NULL name.
Author: Aleksander Alekseev <aleksander@tigerdata.com>
Discussion: https://postgr.es/m/CAJ7c6TNvFTPUTZQuNAoqgzaSGz-iM4XR61D7vEj5PsQXwg2RyA@mail.gmail.com
Backpatch-through: 13
-rw-r--r-- | src/interfaces/ecpg/ecpglib/connect.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/interfaces/ecpg/ecpglib/connect.c b/src/interfaces/ecpg/ecpglib/connect.c index 8afb1f0a26f..b912441f12e 100644 --- a/src/interfaces/ecpg/ecpglib/connect.c +++ b/src/interfaces/ecpg/ecpglib/connect.c @@ -58,7 +58,12 @@ ecpg_get_connection_nr(const char *connection_name) for (con = all_connections; con != NULL; con = con->next) { - if (strcmp(connection_name, con->name) == 0) + /* + * Check for the case of a NULL connection name, stored as such in + * the connection information by ECPGconnect() when the database + * name is not specified by its caller. + */ + if (con->name != NULL && strcmp(connection_name, con->name) == 0) break; } ret = con; |