From: Christopher Faulet Date: Thu, 5 May 2022 07:24:52 +0000 (+0200) Subject: BUG/MEDIUM: mux-fcgi: Be sure to never set EOM flag on an empty HTX message X-Git-Tag: v2.6-dev9~95 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2db904e86c5f19e12d30b8746a622bcb072d914a;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: mux-fcgi: Be sure to never set EOM flag on an empty HTX message This bug was already fixed at many places (stats, promex, lua) but the FCGI multiplexer is also affected. When there is no content-length specified in the response and when the END_REQUEST record is delayed, the response may be truncated because an abort is erroneously detected. If the connection is not closed because "keep-conn" option is set, the response is aborted at the end of the server timeout. This bug is a design issue with the HTX. It should be addressed. But it will probably not be possible to backport them as far as 2.4. So, for now, the only solution is to explicitly add an EOT block with the EOM flag in this case. This patch should fix the issue #1682. It must be backported as far as 2.4. --- diff --git a/src/mux_fcgi.c b/src/mux_fcgi.c index b6ca2dba7c..087e42b2f3 100644 --- a/src/mux_fcgi.c +++ b/src/mux_fcgi.c @@ -3460,6 +3460,8 @@ static size_t fcgi_strm_parse_response(struct fcgi_strm *fstrm, struct buffer *b if (!(h1m->flags & H1_MF_XFER_LEN) && fstrm->state != FCGI_SS_ERROR && (fstrm->flags & FCGI_SF_ES_RCVD) && b_data(&fstrm->rxbuf) == total) { TRACE_DEVEL("end of data", FCGI_EV_RSP_DATA, fconn->conn, fstrm); + if (htx_is_empty(htx) && !htx_add_endof(htx, HTX_BLK_EOT)) + break; htx->flags |= HTX_FL_EOM; h1m->state = H1_MSG_DONE; TRACE_USER("H1 response fully rcvd", FCGI_EV_RSP_DATA|FCGI_EV_RSP_EOM, fconn->conn, fstrm, htx);