X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Furl.c;h=72bb7b90d735c6eca5a73a450dda6b0d4e60a1cf;hb=aa4991b8f74668f04b0ea5e2a73607df3150b257;hp=e95d572ff05377e5b518aa4353675e882e6acd2a;hpb=c17f57f1fa7d0583795ef7321a819c3fb8677a23;p=wget diff --git a/src/url.c b/src/url.c index e95d572f..72bb7b90 100644 --- a/src/url.c +++ b/src/url.c @@ -1,5 +1,6 @@ /* URL handling. - Copyright (C) 1996-2006 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, + 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Wget. @@ -1369,7 +1370,7 @@ append_uri_pathel (const char *b, const char *e, bool escaped, || opt.restrict_files_case == restrict_uppercase) { char *q; - for (q = TAIL (dest); *q; ++q) + for (q = TAIL (dest); q < TAIL (dest) + outlen; ++q) { if (opt.restrict_files_case == restrict_lowercase) *q = TOLOWER (*q); @@ -1836,7 +1837,7 @@ url_string (const struct url *url, enum url_auth_mode auth_mode) quoted_user = url_escape_allow_passthrough (url->user); if (url->passwd) { - if (auth_mode = URL_AUTH_HIDE_PASSWD) + if (auth_mode == URL_AUTH_HIDE_PASSWD) quoted_passwd = HIDDEN_PASSWORD; else quoted_passwd = url_escape_allow_passthrough (url->passwd); @@ -1939,10 +1940,7 @@ getchar_from_escaped_string (const char *str, char *c) if (p[0] == '%') { - if (p[1] == 0) - return 0; /* error: invalid string */ - - if (p[1] == '%') + if (!ISXDIGIT(p[1]) || !ISXDIGIT(p[2])) { *c = '%'; return 1; @@ -1953,8 +1951,13 @@ getchar_from_escaped_string (const char *str, char *c) return 0; /* error: invalid string */ *c = X2DIGITS_TO_NUM (p[1], p[2]); - - return 3; + if (URL_RESERVED_CHAR(*c)) + { + *c = '%'; + return 1; + } + else + return 3; } } else @@ -1971,11 +1974,12 @@ are_urls_equal (const char *u1, const char *u2) const char *p, *q; int pp, qq; char ch1, ch2; + assert(u1 && u2); p = u1; q = u2; - while (*p + while (*p && *q && (pp = getchar_from_escaped_string (p, &ch1)) && (qq = getchar_from_escaped_string (q, &ch2)) && (TOLOWER(ch1) == TOLOWER(ch2))) @@ -2089,6 +2093,7 @@ test_append_uri_pathel() append_string (test_array[i].original_url, &dest); append_uri_pathel (p, p + strlen(p), test_array[i].escaped, &dest); + append_char ('\0', &dest); mu_assert ("test_append_uri_pathel: wrong result", strcmp (dest.base, test_array[i].expected_result) == 0); @@ -2110,6 +2115,8 @@ test_are_urls_equal() { "http://www.adomain.com/apath/", "http://www.adomain.com/anotherpath/", false }, { "http://www.adomain.com/apath/", "http://www.anotherdomain.com/path/", false }, { "http://www.adomain.com/~path/", "http://www.adomain.com/%7epath/", true }, + { "http://www.adomain.com/longer-path/", "http://www.adomain.com/path/", false }, + { "http://www.adomain.com/path%2f", "http://www.adomain.com/path/", false }, }; for (i = 0; i < sizeof(test_array)/sizeof(test_array[0]); ++i)