mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-01-05 14:07:27 -08:00
dev-lang/php: backport GH-20528
MySQL connections are broken when using an IPv6 address enclosed in square brackets. Closes: https://github.com/gentoo/gentoo/pull/45016 Signed-off-by: Lothar Serra Mari <mail@serra.me> Signed-off-by: Michael Orlitzky <mjo@gentoo.org>
This commit is contained in:
parent
d8c32b1269
commit
c7a706382c
81
dev-lang/php/files/php-gh-20528-fix.patch
Normal file
81
dev-lang/php/files/php-gh-20528-fix.patch
Normal file
@ -0,0 +1,81 @@
|
||||
From 9d71c1e0b60cd152a47528dbe514efc443fce920 Mon Sep 17 00:00:00 2001
|
||||
From: Remi Collet <remi@remirepo.net>
|
||||
Date: Thu, 20 Nov 2025 02:58:45 +0100
|
||||
Subject: [PATCH] Fix GH-20528: Regression breaks mysql connexion using an IPv6
|
||||
address enclosed in square brackets
|
||||
|
||||
---
|
||||
ext/mysqli/tests/mysqli_connect_port.phpt | 31 +++++++++++++++++++++++
|
||||
ext/mysqlnd/mysqlnd_connection.c | 17 ++++++++++---
|
||||
2 files changed, 45 insertions(+), 3 deletions(-)
|
||||
create mode 100644 ext/mysqli/tests/mysqli_connect_port.phpt
|
||||
|
||||
diff --git a/ext/mysqli/tests/mysqli_connect_port.phpt b/ext/mysqli/tests/mysqli_connect_port.phpt
|
||||
new file mode 100644
|
||||
index 0000000000000..cb7fd1d8d1628
|
||||
--- /dev/null
|
||||
+++ b/ext/mysqli/tests/mysqli_connect_port.phpt
|
||||
@@ -0,0 +1,31 @@
|
||||
+--TEST--
|
||||
+mysqli_connect() with port in host
|
||||
+--EXTENSIONS--
|
||||
+mysqli
|
||||
+--SKIPIF--
|
||||
+<?php
|
||||
+require_once 'skipifconnectfailure.inc';
|
||||
+?>
|
||||
+--FILE--
|
||||
+<?php
|
||||
+ require_once 'connect.inc';
|
||||
+
|
||||
+ // using port / host arguments
|
||||
+ if (!$link = mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
|
||||
+ printf("Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
|
||||
+ $host, $user, $db, $port, $socket);
|
||||
+ }
|
||||
+
|
||||
+ mysqli_close($link);
|
||||
+
|
||||
+ // using port in host
|
||||
+ if (!$link = mysqli_connect("$host:$port", $user, $passwd, $db, "1$port", $socket)) {
|
||||
+ printf("Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
|
||||
+ "$host:$port", $user, $db, "1$port", $socket);
|
||||
+ }
|
||||
+
|
||||
+ mysqli_close($link);
|
||||
+?>
|
||||
+Done
|
||||
+--EXPECTF--
|
||||
+Done
|
||||
diff --git a/ext/mysqlnd/mysqlnd_connection.c b/ext/mysqlnd/mysqlnd_connection.c
|
||||
index d8e7304e9665f..8268034e8b798 100644
|
||||
--- a/ext/mysqlnd/mysqlnd_connection.c
|
||||
+++ b/ext/mysqlnd/mysqlnd_connection.c
|
||||
@@ -553,13 +553,24 @@ MYSQLND_METHOD(mysqlnd_conn_data, get_scheme)(MYSQLND_CONN_DATA * conn, MYSQLND_
|
||||
port = 3306;
|
||||
}
|
||||
|
||||
- /* ipv6 addresses are in the format [address]:port */
|
||||
if (hostname.s[0] != '[' && mysqlnd_fast_is_ipv6_address(hostname.s)) {
|
||||
+ /* IPv6 without square brackets so without port */
|
||||
transport.l = mnd_sprintf(&transport.s, 0, "tcp://[%s]:%u", hostname.s, port);
|
||||
} else {
|
||||
- /* Not ipv6, but could already contain a port number, in which case we should not add an extra port.
|
||||
+ char *p;
|
||||
+
|
||||
+ /* IPv6 addresses are in the format [address]:port */
|
||||
+ if (hostname.s[0] == '[') { /* IPv6 */
|
||||
+ p = strchr(hostname.s, ']');
|
||||
+ if (p && p[1] != ':') {
|
||||
+ p = NULL;
|
||||
+ }
|
||||
+ } else { /* IPv4 or name */
|
||||
+ p = strchr(hostname.s, ':');
|
||||
+ }
|
||||
+ /* Could already contain a port number, in which case we should not add an extra port.
|
||||
* See GH-8978. In a port doubling scenario, the first port would be used so we do the same to keep BC. */
|
||||
- if (strchr(hostname.s, ':')) {
|
||||
+ if (p) {
|
||||
/* TODO: Ideally we should be able to get rid of this workaround in the future. */
|
||||
transport.l = mnd_sprintf(&transport.s, 0, "tcp://%s", hostname.s);
|
||||
} else {
|
||||
@ -136,6 +136,7 @@ BDEPEND="virtual/pkgconfig"
|
||||
PATCHES=(
|
||||
"${FILESDIR}/php-8.3.9-gd-cachevars.patch"
|
||||
"${FILESDIR}/php-8.4.14-libpcre2-testfix.patch"
|
||||
"${FILESDIR}/php-gh-20528-fix.patch"
|
||||
)
|
||||
|
||||
PHP_MV="$(ver_cut 1)"
|
||||
@ -133,6 +133,7 @@ BDEPEND="virtual/pkgconfig"
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}/php-8.4.14-libpcre2-testfix.patch"
|
||||
"${FILESDIR}/php-gh-20528-fix.patch"
|
||||
)
|
||||
|
||||
PHP_MV="$(ver_cut 1)"
|
||||
@ -133,6 +133,7 @@ BDEPEND="virtual/pkgconfig"
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}/php-8.4.14-libpcre2-testfix.patch"
|
||||
"${FILESDIR}/php-gh-20528-fix.patch"
|
||||
)
|
||||
|
||||
PHP_MV="$(ver_cut 1)"
|
||||
Loading…
x
Reference in New Issue
Block a user