Handle IPv6 literals in URLs correctly

This commit is contained in:
Mukund Sivaraman 2011-02-04 20:28:48 +05:30
parent aa197d6dc8
commit 736e052dc1

View File

@ -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: