From: Willy Tarreau Date: Fri, 1 May 2015 08:25:45 +0000 (+0200) Subject: BUG/MEDIUM: http: remove content-length form responses with bad transfer-encoding X-Git-Tag: v1.6-dev2~165 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b4d0c03aee283e286880f93c4a8c053772a430c8;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: http: remove content-length form responses with bad transfer-encoding The spec mandates that content-length must be removed from messages if Transfer-Encoding is present, not just for valid ones. This must be backported to 1.5 and 1.4. --- diff --git a/src/proto_http.c b/src/proto_http.c index ad075a49f7..a34c11036a 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -6235,12 +6235,11 @@ int http_wait_for_response(struct stream *s, struct channel *rep, int an_bit) /* Chunked responses must have their content-length removed */ ctx.idx = 0; - if (msg->flags & HTTP_MSGF_TE_CHNK) { + if (use_close_only || (msg->flags & HTTP_MSGF_TE_CHNK)) { while (http_find_header2("Content-Length", 14, rep->buf->p, &txn->hdr_idx, &ctx)) http_remove_header2(msg, &txn->hdr_idx, &ctx); } - else while (!use_close_only && - http_find_header2("Content-Length", 14, rep->buf->p, &txn->hdr_idx, &ctx)) { + else while (http_find_header2("Content-Length", 14, rep->buf->p, &txn->hdr_idx, &ctx)) { signed long long cl; if (!ctx.vlen) {