Handle IPv6 literals in URLs correctly
This commit is contained in:
parent
8fd3808ad3
commit
2d02e2211e
15
src/reqs.c
15
src/reqs.c
@ -167,12 +167,18 @@ static void strip_username_password (char *host)
|
||||
static int strip_return_port (char *host)
|
||||
{
|
||||
char *ptr1;
|
||||
char *ptr2;
|
||||
int port;
|
||||
|
||||
ptr1 = strchr (host, ':');
|
||||
ptr1 = strrchr (host, ':');
|
||||
if (ptr1 == NULL)
|
||||
return 0;
|
||||
|
||||
/* Check for IPv6 style literals */
|
||||
ptr2 = strchr (ptr1, ']');
|
||||
if (ptr2 != NULL)
|
||||
return 0;
|
||||
|
||||
*ptr1++ = '\0';
|
||||
if (sscanf (ptr1, "%d", &port) != 1) /* one conversion required */
|
||||
return 0;
|
||||
@ -212,6 +218,13 @@ static int extract_http_url (const char *url, struct request_s *request)
|
||||
port = strip_return_port (request->host);
|
||||
request->port = (port != 0) ? port : HTTP_PORT;
|
||||
|
||||
/* Remove any surrounding '[' and ']' from IPv6 literals */
|
||||
p = strrchr (request->host, ']');
|
||||
if (p && (*(request->host) == '[')) {
|
||||
request->host++;
|
||||
*p = '\0';
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
ERROR_EXIT:
|
||||
|
Loading…
Reference in New Issue
Block a user