From 4a9d9b5cc41613c6f43d39f8c05abb5382ea0a98 Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Thu, 11 Sep 2025 14:13:57 +0200 Subject: [PATCH] client_host(): Properly handle IPv6 addresses Reported by: Joshua Rogers --- parsers.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/parsers.c b/parsers.c index 80297813..b08c381d 100644 --- a/parsers.c +++ b/parsers.c @@ -3763,7 +3763,36 @@ static jb_err client_host(struct client_state *csp, char **header) csp->http->hostport = p; freez(csp->http->host); csp->http->host = q; - q = strchr(csp->http->host, ':'); + + if (*p == '[') + { + /* Numeric IPv6 address delimited by brackets */ + p++; + + q = strchr(p, ']'); + if (q == NULL) + { + /* Missing closing bracket */ + return JB_ERR_PARSE; + } + + *q++ = '\0'; + + if (*q == '\0') + { + q = NULL; + } + else if (*q != ':') + { + /* Garbage after closing bracket */ + return JB_ERR_PARSE; + } + } + else + { + /* Plain non-escaped hostname */ + q = strchr(csp->http->host, ':'); + } if (q != NULL) { /* Terminate hostname and evaluate port string */ -- 2.50.1