]> sjero.net Git - wget/commitdiff
Properly handle missing Content-Length for partial HTTP fetches.
authorMicah Cowan <micah@cowan.name>
Thu, 31 Jan 2008 10:01:00 +0000 (02:01 -0800)
committerMicah Cowan <micah@cowan.name>
Thu, 31 Jan 2008 10:01:00 +0000 (02:01 -0800)
src/ChangeLog
src/http.c

index fe1c8075d476eb18362f706dd1025ad824f9a800..ea07167b1ddd87c531400d112a414641af50459c 100644 (file)
@@ -1,3 +1,10 @@
+2008-01-31  Micah Cowan  <micah@cowan.name>
+
+       * http.c (gethttp): Don't derive hs->contlen from possibly
+       invalid/missing Content-Length; instead, get the appropriate
+       value from the Content-Range header values.
+       (parse_content_range): Handle '*' instance-length field.
+
 2008-01-25  Micah Cowan  <micah@cowan.name>
 
        * main.c: Added notes to translators regarding (C), diacritics
index 1729b5cbccd30cb0aff822b7766aceb63c7eea5a..da4b32e38e093476096c93491b137ea3b6f76521 100644 (file)
@@ -864,8 +864,11 @@ parse_content_range (const char *hdr, wgint *first_byte_ptr,
     return false;
   *last_byte_ptr = num;
   ++hdr;
-  for (num = 0; c_isdigit (*hdr); hdr++)
-    num = 10 * num + (*hdr - '0');
+  if (*hdr == '*')
+    num = -1;
+  else
+    for (num = 0; c_isdigit (*hdr); hdr++)
+      num = 10 * num + (*hdr - '0');
   *entity_length_ptr = num;
   return true;
 }
@@ -2052,7 +2055,10 @@ File `%s' already there; not retrieving.\n\n"), hs->local_file);
       wgint first_byte_pos, last_byte_pos, entity_length;
       if (parse_content_range (hdrval, &first_byte_pos, &last_byte_pos,
                                &entity_length))
-        contrange = first_byte_pos;
+        {
+          contrange = first_byte_pos;
+          contlen = last_byte_pos - first_byte_pos + 1;
+        }
     }
   resp_free (resp);
 
@@ -2152,7 +2158,10 @@ File `%s' already there; not retrieving.\n\n"), hs->local_file);
       CLOSE_INVALIDATE (sock);
       return RANGEERR;
     }
-  hs->contlen = contlen + contrange;
+  if (contlen == -1)
+    hs->contlen = -1;
+  else
+    hs->contlen = contlen + contrange;
 
   if (opt.verbose)
     {