mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
Parse content-length before using it. Fixes NTLM (#27192).
This commit is contained in:
parent
ba84c1ec98
commit
ee1df87dd8
@ -1,3 +1,9 @@
|
|||||||
|
2009-08-17 Tony Lewis <tlewis@exelana.com>
|
||||||
|
|
||||||
|
* http.c (gethttp): Ensure that we parse Content-Length before we
|
||||||
|
attempt to refer to its value. Without this fix, NTLM support was
|
||||||
|
completely buggered. #27192
|
||||||
|
|
||||||
2009-08-09 Michael Baeuerle <michael.baeuerle@gmx.net>
|
2009-08-09 Michael Baeuerle <michael.baeuerle@gmx.net>
|
||||||
|
|
||||||
* ftp.c: #include <strings.h> for strcasecmp.
|
* ftp.c: #include <strings.h> for strcasecmp.
|
||||||
|
50
src/http.c
50
src/http.c
@ -1834,6 +1834,31 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy,
|
|||||||
print_server_response (resp, " ");
|
print_server_response (resp, " ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!opt.ignore_length
|
||||||
|
&& resp_header_copy (resp, "Content-Length", hdrval, sizeof (hdrval)))
|
||||||
|
{
|
||||||
|
wgint parsed;
|
||||||
|
errno = 0;
|
||||||
|
parsed = str_to_wgint (hdrval, NULL, 10);
|
||||||
|
if (parsed == WGINT_MAX && errno == ERANGE)
|
||||||
|
{
|
||||||
|
/* Out of range.
|
||||||
|
#### If Content-Length is out of range, it most likely
|
||||||
|
means that the file is larger than 2G and that we're
|
||||||
|
compiled without LFS. In that case we should probably
|
||||||
|
refuse to even attempt to download the file. */
|
||||||
|
contlen = -1;
|
||||||
|
}
|
||||||
|
else if (parsed < 0)
|
||||||
|
{
|
||||||
|
/* Negative Content-Length; nonsensical, so we can't
|
||||||
|
assume any information about the content to receive. */
|
||||||
|
contlen = -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
contlen = parsed;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check for keep-alive related responses. */
|
/* Check for keep-alive related responses. */
|
||||||
if (!inhibit_keep_alive && contlen != -1)
|
if (!inhibit_keep_alive && contlen != -1)
|
||||||
{
|
{
|
||||||
@ -2038,31 +2063,6 @@ File %s already there; not retrieving.\n\n"), quote (hs->local_file));
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!opt.ignore_length
|
|
||||||
&& resp_header_copy (resp, "Content-Length", hdrval, sizeof (hdrval)))
|
|
||||||
{
|
|
||||||
wgint parsed;
|
|
||||||
errno = 0;
|
|
||||||
parsed = str_to_wgint (hdrval, NULL, 10);
|
|
||||||
if (parsed == WGINT_MAX && errno == ERANGE)
|
|
||||||
{
|
|
||||||
/* Out of range.
|
|
||||||
#### If Content-Length is out of range, it most likely
|
|
||||||
means that the file is larger than 2G and that we're
|
|
||||||
compiled without LFS. In that case we should probably
|
|
||||||
refuse to even attempt to download the file. */
|
|
||||||
contlen = -1;
|
|
||||||
}
|
|
||||||
else if (parsed < 0)
|
|
||||||
{
|
|
||||||
/* Negative Content-Length; nonsensical, so we can't
|
|
||||||
assume any information about the content to receive. */
|
|
||||||
contlen = -1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
contlen = parsed;
|
|
||||||
}
|
|
||||||
|
|
||||||
request_free (req);
|
request_free (req);
|
||||||
|
|
||||||
hs->statcode = statcode;
|
hs->statcode = statcode;
|
||||||
|
Loading…
Reference in New Issue
Block a user