From ee1df87dd81fd96a4a88c55d627916a32fc0ff80 Mon Sep 17 00:00:00 2001 From: Tony Lewis Date: Mon, 17 Aug 2009 20:47:05 -0700 Subject: [PATCH] Parse content-length before using it. Fixes NTLM (#27192). --- src/ChangeLog | 6 ++++++ src/http.c | 50 +++++++++++++++++++++++++------------------------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 697690d5..983657ec 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2009-08-17 Tony Lewis + + * 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 * ftp.c: #include for strcasecmp. diff --git a/src/http.c b/src/http.c index d24db5fc..a469745c 100644 --- a/src/http.c +++ b/src/http.c @@ -1834,6 +1834,31 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy, 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. */ 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); hs->statcode = statcode; -- 2.39.2