diff --git a/src/ChangeLog b/src/ChangeLog index 85246980..ee120fc0 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2007-07-31 Micah Cowan + + * http.c (gethttp): Set contlen = -1 when we encounter a + negative-valued Content-Length header, so we don't consider it + an internal error later on and call abort(). + 2007-07-29 Micah Cowan * url.h, url.c (url_string): Replaced bool arg of the url_string diff --git a/src/http.c b/src/http.c index e6f266a3..26342593 100644 --- a/src/http.c +++ b/src/http.c @@ -1899,12 +1899,20 @@ File `%s' already there; not retrieving.\n\n"), hs->local_file); 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; + { + /* 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; }