From: Willy Tarreau Date: Mon, 30 Oct 2017 18:31:59 +0000 (+0100) Subject: MEDIUM: h1: ensure that 1xx, 204 and 304 don't have a payload body X-Git-Tag: v1.8-rc1~205 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8ea0f38c75016a5ca4d5410355133f456b6db5c5;p=thirdparty%2Fhaproxy.git MEDIUM: h1: ensure that 1xx, 204 and 304 don't have a payload body It's important for the H2 to H1 gateway that the response parser properly clears the H1 message's body_len when seeing these status codes so that we don't hang waiting to transfer data that will not come. --- diff --git a/src/h1.c b/src/h1.c index 7e8f19d51a..856b654ddf 100644 --- a/src/h1.c +++ b/src/h1.c @@ -1127,7 +1127,14 @@ int h1_headers_to_hdr_list(char *start, const char *stop, if (h1m) { long long cl; - if (isteq(n, ist("transfer-encoding"))) { + if (start[st_c] == '1' || /* 100..199 */ + isteq(ist2(start + st_c, st_c_l), ist("204")) || + isteq(ist2(start + st_c, st_c_l), ist("304"))) { + /* no contents, claim c-len is present and set to zero */ + h1m->flags |= H1_MF_CLEN; + h1m->curr_len = h1m->body_len = 0; + } + else if (isteq(n, ist("transfer-encoding"))) { h1m->flags &= ~H1_MF_CLEN; h1m->flags |= H1_MF_CHNK; }