BUG/MEDIUM: mux-h1: Always set CS_FL_EOI for response in MSG_DONE state
During the message parsing, if in MSG_DONE state, the CS_FL_EOI flag must
always be set on the conn-stream if following conditions are met :
* It is a response or
* It is a request but not a protocol upgrade nor a CONNECT.
For now, there is no test on the message type (request or response). Thus
the CS_FL_EOI flag is not set for a response with a "Connection: upgrade"
header but not a 101 response.
This bug was introduced by the commit 3e1748bbf
("BUG/MINOR: mux-h1: Don't
set CS_FL_EOI too early for protocol upgrade requests"). It was backported
as far as 2.0. Thus, this patch must also be backported as far as 2.0.
This commit is contained in:
parent
bf7175f9b6
commit
a22782b597
10
src/mux_h1.c
10
src/mux_h1.c
|
@ -1681,11 +1681,15 @@ static size_t h1_process_input(struct h1c *h1c, struct buffer *buf, size_t count
|
|||
h1s->cs->flags &= ~CS_FL_MAY_SPLICE;
|
||||
}
|
||||
|
||||
/* Don't set EOI on the conn-stream for protocol upgrade or connect
|
||||
* requests, wait the response to do so or not depending on the status
|
||||
/* Set EOI on conn-stream in DONE state iff:
|
||||
* - it is a response
|
||||
* - it is a request but no a protocol upgrade nor a CONNECT
|
||||
*
|
||||
* If not set, Wait the response to do so or not depending on the status
|
||||
* code.
|
||||
*/
|
||||
if ((h1m->state == H1_MSG_DONE) && (h1s->meth != HTTP_METH_CONNECT) && !(h1m->flags & H1_MF_CONN_UPG))
|
||||
if (((h1m->state == H1_MSG_DONE) && (h1m->flags & H1_MF_RESP)) ||
|
||||
((h1m->state == H1_MSG_DONE) && (h1s->meth != HTTP_METH_CONNECT) && !(h1m->flags & H1_MF_CONN_UPG)))
|
||||
h1s->cs->flags |= CS_FL_EOI;
|
||||
|
||||
if (h1s_data_pending(h1s) && !htx_is_empty(htx))
|
||||
|
|
Loading…
Reference in New Issue