dispose http(s) 416 error page as non-content
authorDavid Kalnischkies <david@kalnischkies.de>
Sat, 29 Nov 2014 16:59:52 +0000 (17:59 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Mon, 22 Dec 2014 13:23:39 +0000 (14:23 +0100)
commit92e8c1ff287ab829de825e00cdf94744e699ff97
tree01a66b8ce8616bdc71cbc150f04e2f7e524d06b9
parent988d4f441eb2c7ac64cec339dbc02daa47fe84a4
dispose http(s) 416 error page as non-content

Real webservers (like apache) actually send an error page with a 416
response, but our client didn't expect it leaving the page on the socket
to be parsed as response for the next request (http) or as file content
(https), which isn't what we want at all… Symptom is a "Bad header line"
as html usually doesn't parse that well to an http-header.

This manifests itself e.g. if we have a complete file (or larger) in
partial/ which isn't discarded by If-Range as the server doesn't support
it (or it is just newer, think: mirror rotation).
It is a sort-of regression of 78c72d0ce22e00b194251445aae306df357d5c1a,
which removed the filesize - 1 trick, but this had its own problems…

To properly test this our webserver gains the ability to reply with
transfer-encoding: chunked as most real webservers will use it to send
the dynamically generated error pages.

(The tests and their binary helpers had to be slightly modified to
apply, but the patch to fix the issue itself is unchanged.)

Closes: 768797
cmdline/apt-helper.cc
methods/http.cc
methods/https.cc
methods/server.cc
methods/server.h
test/integration/framework
test/integration/test-apt-helper
test/integration/test-partial-file-support
test/interactive-helper/aptwebserver.cc