BUG/MEDIUM: mux-h1: make HTX chunking consistent with H2

When transfering from H1 to H1, chunking is always indicated by the
presence of the Transfer-encoding header field. But when a message
comes from H2 there is no such header and only HTX_SL_F_XFER_LEN
ought to be relied on. This one will also result in H1_MF_XFER_LEN
to be set, just like transfer-encoding, so let's always rely on
this latter flag to detect the need for chunking (when CLEN is not
here) and automatically add the transfer-encoding header if it was
not present, as reported by H1_MF_CHNK.

This must be backported to 1.9.
This commit is contained in:
Willy Tarreau 2019-01-03 17:39:54 +01:00
parent 34d234824d
commit 4710d20743

View File

@ -1533,6 +1533,14 @@ static size_t h1_process_output(struct h1c *h1c, struct buffer *buf, size_t coun
goto copy;
}
}
if ((h1m->flags & (H1_MF_CLEN|H1_MF_CHNK|H1_MF_XFER_LEN)) == H1_MF_XFER_LEN) {
/* chunking needed but header not seen */
if (!chunk_memcat(tmp, "transfer-encoding: chunked\r\n", 28))
goto copy;
h1m->flags |= H1_MF_CHNK;
}
h1m->state = H1_MSG_LAST_LF;
if (!chunk_memcat(tmp, "\r\n", 2))
goto copy;