summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2017-07-01 19:14:03 +0200
committerJulian Andres Klode <jak@debian.org>2017-09-13 18:21:31 +0200
commitdd547ebaffd2aceb42e2908f1d5f0ab386af6cb1 (patch)
tree7628bfb1b9e86018a37d21ef5cfc1a323780cf06
parent6636ec6d45a2da21faf2c004faba346056a52039 (diff)
downloadapt-dd547ebaffd2aceb42e2908f1d5f0ab386af6cb1.tar.gz
http: A response with Content-Length: 0 has no content
APT considered any response with a Content-Length to have a body, even if the value of the header was 0. A 0 length body however, is equal to no body. (cherry picked from commit d47fb34ae03566feec7fec6dccba80e45fa03e6f)
-rw-r--r--methods/server.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/methods/server.cc b/methods/server.cc
index cac77e24c..5afe42eba 100644
--- a/methods/server.cc
+++ b/methods/server.cc
@@ -163,6 +163,9 @@ bool ServerState::HeaderLine(string Line)
if (stringcasecmp(Tag,"Content-Length:") == 0)
{
+ auto ContentLength = strtoull(Val.c_str(), NULL, 10);
+ if (ContentLength == 0)
+ return true;
if (Encoding == Closes)
Encoding = Stream;
HaveContent = true;
@@ -171,7 +174,7 @@ bool ServerState::HeaderLine(string Line)
if (Result == 416)
DownloadSizePtr = &JunkSize;
- *DownloadSizePtr = strtoull(Val.c_str(), NULL, 10);
+ *DownloadSizePtr = ContentLength;
if (*DownloadSizePtr >= std::numeric_limits<unsigned long long>::max())
return _error->Errno("HeaderLine", _("The HTTP server sent an invalid Content-Length header"));
else if (*DownloadSizePtr == 0)