Parse content-length before using it. Fixes NTLM (#27192).
authorTony Lewis <tlewis@exelana.com>
Tue, 18 Aug 2009 03:47:05 +0000 (20:47 -0700)
committerTony Lewis <tlewis@exelana.com>
Tue, 18 Aug 2009 03:47:05 +0000 (20:47 -0700)
src/ChangeLog
src/http.c

index 697690d58edb56a5dcbf295565959c3053499536..983657ece5519faa619a59072deb98a1d64ba996 100644 (file)
@@ -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>
 
        * ftp.c: #include <strings.h> for strcasecmp.
index d24db5fc38f3393ef6937c32e1ba03e3e6eba24b..a469745c46360d52f921da96b3c57fed5b4b71c3 100644 (file)
@@ -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;