From b9a9790be0657249fa5e6687883b43570b0a3f1f Mon Sep 17 00:00:00 2001 From: David Carlier Date: Mon, 26 Feb 2024 19:36:42 +0000 Subject: [PATCH] Fix GH-13519: PGSQL_CONNECT_FORCE_RENEW with persistent connections. persistent connections did not take in account this flag, after the usual link sanity checks, we remove its entry. Close GH-13519 --- NEWS | 2 ++ ext/pgsql/pgsql.c | 7 +++++++ ext/pgsql/tests/gh13519.phpt | 30 ++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 ext/pgsql/tests/gh13519.phpt diff --git a/NEWS b/NEWS index 4e95d7e576a..12857e90cdc 100644 --- a/NEWS +++ b/NEWS @@ -31,6 +31,8 @@ PHP NEWS - PGSQL: . Fixed bug GH-13354 (pg_execute/pg_send_query_params/pg_send_execute with null value passed by reference). (George Barbarosie) + . Fixed bug GH-13519 (PGSQL_CONNECT_FORCE_RENEW not working with persistent + connections. (David Carlier) - Standard: . Fixed array key as hash to string (case insensitive) comparison typo diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 6e04848bdea..9b2488a5eb8 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -562,6 +562,7 @@ static void php_pgsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) /* try to find if we already have this link in our persistent list */ if ((le = zend_hash_find_ptr(&EG(persistent_list), str.s)) == NULL) { /* we don't */ +newpconn: if (PGG(max_links) != -1 && PGG(num_links) >= PGG(max_links)) { php_error_docref(NULL, E_WARNING, "Cannot create new link. Too many open links (" ZEND_LONG_FMT ")", PGG(num_links)); @@ -590,6 +591,12 @@ static void php_pgsql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent) PGG(num_links)++; PGG(num_persistent)++; } else { /* we do */ + if ((connect_type & PGSQL_CONNECT_FORCE_NEW)) { + if (zend_hash_del(&EG(persistent_list), str.s) != SUCCESS) { + goto err; + } + goto newpconn; + } if (le->type != le_plink) { goto err; } diff --git a/ext/pgsql/tests/gh13519.phpt b/ext/pgsql/tests/gh13519.phpt new file mode 100644 index 00000000000..17379cdacce --- /dev/null +++ b/ext/pgsql/tests/gh13519.phpt @@ -0,0 +1,30 @@ +--TEST-- +GH-13519 - PGSQL_CONNECT_FORCE_NEW with persistent connections. +--EXTENSIONS-- +pgsql +--SKIPIF-- + +--FILE-- + +--EXPECT-- +bool(true) +bool(true) +bool(true) +bool(false) +bool(false) +bool(false)