diff --git a/src/ChangeLog b/src/ChangeLog index 74a3b84c..1d882c50 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2002-01-26 Hrvoje Niksic + + * url.c (url_parse): Allow all hex digits, not only decimal ones, + to form an IP address. + 2002-01-26 Hrvoje Niksic * url.c (urlchr_table): Make square braces reserved, so we can diff --git a/src/url.c b/src/url.c index 293b362e..b1087378 100644 --- a/src/url.c +++ b/src/url.c @@ -704,20 +704,23 @@ url_parse (const char *url, int *error) int invalid = 0; ++p; while (1) - switch (*p++) - { - case ']': - goto out; - case '\0': - SETERR (error, PE_UNTERMINATED_IPV6_ADDRESS); - return NULL; - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - case ':': case '.': - break; - default: - invalid = 1; - } + { + char c = *p++; + switch (c) + { + case ']': + goto out; + case '\0': + SETERR (error, PE_UNTERMINATED_IPV6_ADDRESS); + return NULL; + case ':': case '.': + break; + default: + if (ISXDIGIT (c)) + break; + invalid = 1; + } + } out: if (invalid) {