When no data filter are registered on a channel, if the message length is known,
the HTTP payload is infinitely forwarded to save calls to process_stream(). When
we finally fall back again in XFER_BODY analyzers, we detect the end of the
message by checking channel flags. If CF_EOI or CF_SHUTR is set, we switch the
message in DONE state. For CF_EOI, it is relevant. But not for CF_SHUTR. a
shutdown for reads without the end of input must be interpreted as an abort for
messages with a known length.
Because of this bug, some aborts are not properly handled and reported. Instead,
we interpret it as a legitimate shutdown.
This patch must be backported to 2.0.
if (req->to_forward) {
if (req->to_forward == CHN_INFINITE_FORWARD) {
- if (req->flags & (CF_SHUTR|CF_EOI)) {
+ if (req->flags & CF_EOI) {
msg->msg_state = HTTP_MSG_DONE;
req->to_forward = 0;
goto done;
if (res->to_forward) {
if (res->to_forward == CHN_INFINITE_FORWARD) {
- if (res->flags & (CF_SHUTR|CF_EOI)) {
+ if (res->flags & CF_EOI) {
msg->msg_state = HTTP_MSG_DONE;
res->to_forward = 0;
goto done;