Properly handle missing Content-Length for partial HTTP fetches.

This commit is contained in:
Micah Cowan 2008-01-31 02:01:00 -08:00
parent 12f9277ecd
commit d92eda101b
2 changed files with 20 additions and 4 deletions

View 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

View 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)
{