From: Willy Tarreau Date: Fri, 1 May 2015 08:06:30 +0000 (+0200) Subject: BUG/MEDIUM: http: do not restrict parsing of transfer-encoding to HTTP/1.1 X-Git-Tag: v1.6-dev2~167 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4979d5c5d100e7064862d2f586b65184d68bcd75;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: http: do not restrict parsing of transfer-encoding to HTTP/1.1 While Transfer-Encoding is HTTP/1.1, we must still parse it in HTTP/1.0 in case an agent sends it, because it's likely that the other side might use it as well, causing confusion. This will also result in getting rid of the Content-Length header in such abnormal situations and in having a clean connection. This must be backported to 1.5 and 1.4. --- diff --git a/src/proto_http.c b/src/proto_http.c index 4b4d2be9d3..7f5df4c9ab 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -3047,8 +3047,7 @@ int http_wait_for_request(struct stream *s, struct channel *req, int an_bit) use_close_only = 0; ctx.idx = 0; /* set TE_CHNK and XFER_LEN only if "chunked" is seen last */ - while ((msg->flags & HTTP_MSGF_VER_11) && - http_find_header2("Transfer-Encoding", 17, req->buf->p, &txn->hdr_idx, &ctx)) { + while (http_find_header2("Transfer-Encoding", 17, req->buf->p, &txn->hdr_idx, &ctx)) { if (ctx.vlen == 7 && strncasecmp(ctx.line + ctx.val, "chunked", 7) == 0) msg->flags |= (HTTP_MSGF_TE_CHNK | HTTP_MSGF_XFER_LEN); else if (msg->flags & HTTP_MSGF_TE_CHNK) { @@ -6229,8 +6228,7 @@ int http_wait_for_response(struct stream *s, struct channel *rep, int an_bit) use_close_only = 0; ctx.idx = 0; - while ((msg->flags & HTTP_MSGF_VER_11) && - http_find_header2("Transfer-Encoding", 17, rep->buf->p, &txn->hdr_idx, &ctx)) { + while (http_find_header2("Transfer-Encoding", 17, rep->buf->p, &txn->hdr_idx, &ctx)) { if (ctx.vlen == 7 && strncasecmp(ctx.line + ctx.val, "chunked", 7) == 0) msg->flags |= (HTTP_MSGF_TE_CHNK | HTTP_MSGF_XFER_LEN); else if (msg->flags & HTTP_MSGF_TE_CHNK) {