From 2525e73caacd272ca0e7833f9a5b60d15cd1bfea Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Thu, 21 Mar 2024 18:59:36 +0100 Subject: fix(DB): Sanitize `host` parameter for postgres databases when IPv6 address is passed Doctrine is using `pg_connect` with the `host` parameter, this does not allow IPv6 addresses in URI notation. So we need to extract the IP address and pass it directly Signed-off-by: Ferdinand Thiessen --- lib/private/DB/ConnectionFactory.php | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'lib/private/DB') diff --git a/lib/private/DB/ConnectionFactory.php b/lib/private/DB/ConnectionFactory.php index e868f18ec34..c7a558e5879 100644 --- a/lib/private/DB/ConnectionFactory.php +++ b/lib/private/DB/ConnectionFactory.php @@ -128,6 +128,15 @@ class ConnectionFactory { $eventManager->addEventSubscriber(new SetTransactionIsolationLevel()); $additionalConnectionParams = array_merge($this->createConnectionParams(), $additionalConnectionParams); switch ($normalizedType) { + case 'pgsql': + // pg_connect used by Doctrine DBAL does not support URI notation (enclosed in brackets) + $matches = []; + if (preg_match('/^\[([^\]]+)\]$/', $additionalConnectionParams['host'], $matches)) { + // Host variable carries a port or socket. + $additionalConnectionParams['host'] = $matches[1]; + } + break; + case 'oci': $eventManager->addEventSubscriber(new OracleSessionInit); // the driverOptions are unused in dbal and need to be mapped to the parameters -- cgit v1.2.3