X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Furl.c;h=e79cf8a2e0736688c0ce1495adc7d7b48286946c;hb=84395897ad2d1c107be470946daba744b2e7ebe8;hp=48b23d6c649cb208e23933ef8aa08ee58d999815;hpb=3b8b1b82d66a826d178b37b52dd9d158a5bb2ddc;p=wget diff --git a/src/url.c b/src/url.c index 48b23d6c..e79cf8a2 100644 --- a/src/url.c +++ b/src/url.c @@ -42,7 +42,6 @@ as that of the covered work. */ #include "utils.h" #include "url.h" #include "host.h" /* for is_valid_ipv6_address */ -#include "iri.h" #ifdef TESTING #include "test.h" @@ -641,7 +640,7 @@ static const char *parse_errors[] = { error, and if ERROR is not NULL, also set *ERROR to the appropriate error code. */ struct url * -url_parse (const char *url, int *error) +url_parse (const char *url, int *error, struct iri *iri) { struct url *u; const char *p; @@ -660,7 +659,7 @@ url_parse (const char *url, int *error) int port; char *user = NULL, *passwd = NULL; - char *url_encoded = NULL; + char *url_encoded = NULL, *new_url = NULL; int error_code; @@ -671,15 +670,20 @@ url_parse (const char *url, int *error) goto error; } - if (opt.enable_iri) + if (iri && iri->utf8_encode) { url_unescape ((char *) url); - url = locale_to_utf8(url); + iri->utf8_encode = remote_to_utf8 (iri, url, (const char **) &new_url); + if (!iri->utf8_encode) + new_url = NULL; } - url_encoded = reencode_escapes (url); + url_encoded = reencode_escapes (new_url ? new_url : url); p = url_encoded; + if (new_url && url_encoded != new_url) + xfree (new_url); + p += strlen (supported_schemes[scheme].leading_string); uname_b = p; p = url_skip_credentials (p); @@ -849,16 +853,17 @@ url_parse (const char *url, int *error) { url_unescape (u->host); host_modified = true; - } - if (opt.enable_iri) - { - char *new = idn_encode (u->host); - if (new) + /* Apply IDNA regardless of iri->utf8_encode status */ + if (opt.enable_iri && iri) { - xfree (u->host); - u->host = new; - host_modified = true; + char *new = idn_encode (iri, u->host); + if (new) + { + xfree (u->host); + u->host = new; + host_modified = true; + } } }