1
0
mirror of https://github.com/moparisthebest/wget synced 2024-07-03 16:38:41 -04:00

[svn] Consistently prepend / to path when entering cookie code.

This commit is contained in:
hniksic 2005-06-24 05:15:03 -07:00
parent 0a41b946d4
commit 61c5b229b7
3 changed files with 27 additions and 20 deletions

View File

@ -1,3 +1,10 @@
2005-06-24 Hrvoje Niksic <hniksic@xemacs.org>
* http.c (gethttp): Don't prepend / here.
* cookies.c (cookie_handle_set_cookie): Prepend / to PATH.
(cookie_header): Ditto.
2005-06-24 Hrvoje Niksic <hniksic@xemacs.org>
* init.c: opt.verbose must be declared as int.

View File

@ -822,6 +822,17 @@ check_path_match (const char *cookie_path, const char *path)
{
return path_matches (path, cookie_path) != 0;
}
/* Prepend '/' to string S. S is copied to fresh stack-allocated
space and its value is modified to point to the new location. */
#define PREPEND_SLASH(s) do { \
char *PS_newstr = (char *) alloca (1 + strlen (s) + 1); \
*PS_newstr = '/'; \
strcpy (PS_newstr + 1, s); \
s = PS_newstr; \
} while (0)
/* Process the HTTP `Set-Cookie' header. This results in storing the
cookie or discarding a matching one, or ignoring it completely, all
@ -835,6 +846,11 @@ cookie_handle_set_cookie (struct cookie_jar *jar,
struct cookie *cookie;
cookies_now = time (NULL);
/* Wget's paths don't begin with '/' (blame rfc1808), but cookie
usage assumes /-prefixed paths. Until the rest of Wget is fixed,
simply prepend slash to PATH. */
PREPEND_SLASH (path);
cookie = parse_set_cookies (set_cookie, update_cookie_field, false);
if (!cookie)
goto out;
@ -977,16 +993,7 @@ find_chains_of_host (struct cookie_jar *jar, const char *host,
static int
path_matches (const char *full_path, const char *prefix)
{
int len;
if (*prefix != '/')
/* Wget's HTTP paths do not begin with '/' (the URL code treats it
as a mere separator, inspired by rfc1808), but the '/' is
assumed when matching against the cookie stuff. */
return 0;
++prefix;
len = strlen (prefix);
int len = strlen (prefix);
if (0 != strncmp (full_path, prefix, len))
/* FULL_PATH doesn't begin with PREFIX. */
@ -1149,6 +1156,7 @@ cookie_header (struct cookie_jar *jar, const char *host,
int count, i, ocnt;
char *result;
int result_size, pos;
PREPEND_SLASH (path); /* see cookie_handle_set_cookie */
/* First, find the cookie chains whose domains match HOST. */

View File

@ -1706,7 +1706,6 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy)
/* Handle (possibly multiple instances of) the Set-Cookie header. */
if (opt.cookies)
{
char *pth = NULL;
int scpos;
const char *scbeg, *scend;
/* The jar should have been created by now. */
@ -1717,15 +1716,8 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy)
++scpos)
{
char *set_cookie; BOUNDED_TO_ALLOCA (scbeg, scend, set_cookie);
if (pth == NULL)
{
/* u->path doesn't begin with /, which cookies.c expects. */
pth = (char *) alloca (1 + strlen (u->path) + 1);
pth[0] = '/';
strcpy (pth + 1, u->path);
}
cookie_handle_set_cookie (wget_cookie_jar, u->host, u->port, pth,
set_cookie);
cookie_handle_set_cookie (wget_cookie_jar, u->host, u->port,
u->path, set_cookie);
}
}