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.
This commit is contained in:
Willy Tarreau 2017-10-30 19:31:59 +01:00
parent 404d978d40
commit 8ea0f38c75

View File

@ -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;
}