OSSL_parse_url(): Improve handling of IPv6 addresses
authorDr. David von Oheimb <David.von.Oheimb@siemens.com>
Mon, 8 Mar 2021 08:59:35 +0000 (09:59 +0100)
committerDr. David von Oheimb <dev@ddvo.net>
Wed, 31 Mar 2021 17:53:05 +0000 (19:53 +0200)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/14630)

crypto/http/http_lib.c
test/http_test.c

index 3bf642a4f410165ba57974a0edb5a9b7709172de..f0fc770f22dd8d572a0ebc46d029fa29f3e6c102 100644 (file)
@@ -87,11 +87,10 @@ int OSSL_parse_url(const char *url, char **pscheme, char **puser, char **phost,
     /* parse host name/address as far as needed here */
     if (host[0] == '[') {
         /* ipv6 literal, which may include ':' */
-        host++;
-        host_end = strchr(host, ']');
+        host_end = strchr(host + 1, ']');
         if (host_end == NULL)
             goto parse_err;
-        p = host_end + 1;
+        p = ++host_end;
     } else {
         /* look for start of optional port, path, query, or fragment */
         host_end = strchr(host, ':');
index e59ef6383327953000997a284dc02bbd89a3ad71..0a3389c15f382718e16fc3e75c168ef197e63a14 100644 (file)
@@ -204,7 +204,7 @@ static int test_http_url_ipv4(void)
 
 static int test_http_url_ipv6(void)
 {
-    return test_http_url_ok("http://[FF01::101]:6", 0, "FF01::101", "6", "/");
+    return test_http_url_ok("http://[FF01::101]:6", 0, "[FF01::101]", "6", "/");
 }
 
 static int test_http_url_invalid(const char *url)