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:
parent
0a41b946d4
commit
61c5b229b7
@ -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.
|
||||
|
@ -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. */
|
||||
|
||||
|
12
src/http.c
12
src/http.c
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user