From: Daniel Stenberg Date: Thu, 3 Oct 2024 12:37:00 +0000 (+0200) Subject: urlapi: normalize the IPv6 address X-Git-Tag: curl-8_11_0~241 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=566a6d7b09a3db06744122c76fba0bd16d8de7c1;p=thirdparty%2Fcurl.git urlapi: normalize the IPv6 address As the parsing and address "regeneration" are done anyway, we might as well use the updated version in the result and thereby A) get a normalized (and lower cased) version of the address and B) avoid a strcpy(). Updated test 1560 to verify. Closes #15143 --- diff --git a/lib/urlapi.c b/lib/urlapi.c index c6a5095847..98c8f6fe6d 100644 --- a/lib/urlapi.c +++ b/lib/urlapi.c @@ -610,19 +610,14 @@ static CURLUcode ipv6_parse(struct Curl_URL *u, char *hostname, /* hostname is fine */ } - /* Check the IPv6 address. */ + /* Normalize the IPv6 address */ { char dest[16]; /* fits a binary IPv6 address */ - char norm[MAX_IPADR_LEN]; hostname[hlen] = 0; /* end the address there */ if(1 != Curl_inet_pton(AF_INET6, hostname, dest)) return CURLUE_BAD_IPV6; - - /* check if it can be done shorter */ - if(Curl_inet_ntop(AF_INET6, dest, norm, sizeof(norm)) && - (strlen(norm) < hlen)) { - strcpy(hostname, norm); - hlen = strlen(norm); + if(Curl_inet_ntop(AF_INET6, dest, hostname, hlen)) { + hlen = strlen(hostname); /* might be shorter now */ hostname[hlen + 1] = 0; } hostname[hlen] = ']'; /* restore ending bracket */ diff --git a/tests/libtest/lib1560.c b/tests/libtest/lib1560.c index 78bdb161b3..d5253a739a 100644 --- a/tests/libtest/lib1560.c +++ b/tests/libtest/lib1560.c @@ -565,6 +565,10 @@ static const struct urltestcase get_url_list[] = { {"https://[fe80:0:0:0:409b::]:80/moo", "https://[fe80::409b:0:0:0]:80/moo", 0, 0, CURLUE_OK}, + /* normalize to lower case */ + {"https://[FE80:0:A:0:409B:0:0:0]:80/moo", + "https://[fe80:0:a:0:409b::]:80/moo", + 0, 0, CURLUE_OK}, {"https://[::%25fakeit];80/moo", "", 0, 0, CURLUE_BAD_PORT_NUMBER},