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  <micah@cowan.name>
+
+	* 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  <micah@cowan.name>
 
 	* 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;
     }