--- url.c.orig Wed Dec 27 11:14:16 2000 +++ url.c Wed Dec 27 13:23:43 2000 @@ -558,8 +558,25 @@ p += 2; /* scheme://foo */ analyze_url: q = p; - while (*p && *p != ':' && *p != '/' && *p != '@') + while (*p && *p != ':' && *p != '/' && *p != '@') { + if (*p == '[') { /* rfc2732 compliance */ + char *p_colon = NULL; + do { + p++; + if ((p_colon == NULL) && (*p == ':')) + p_colon = p; + } while (*p && (isxdigit(*p) || *p == ':' || *p == '.')); + if (*p == ']') { + p++; + break; + } + else if (p_colon) { + p = p_colon; + break; + } + } p++; + } switch (*p) { case '\0': /* scheme://host */ /* scheme://user@host */ @@ -600,6 +617,12 @@ p_url->host = copyPath(q, p - q, COPYPATH_SPC_IGNORE); p_url->port = DefaultPort[p_url->scheme]; break; + } + /* rfc2732 compliance */ + if (p_url->host != NULL && p_url->host[0] == '[' && + p_url->host[strlen(p_url->host)-1] == ']' ) { + p_url->host[strlen(p_url->host)-1] = '\0'; + ++(p_url->host); } analyze_file: if (p_url->scheme == SCM_LOCAL && p_url->user == NULL &&