From: Christopher Faulet Date: Wed, 15 Jul 2020 13:46:30 +0000 (+0200) Subject: BUG/MINOR: mux-fcgi: Handle empty STDERR record X-Git-Tag: v2.1.8~29 X-Git-Url: http://git.haproxy.org/?a=commitdiff_plain;h=928cf5a4fdb894a91831fee2ba3469b274f9ad30;p=haproxy-2.1.git BUG/MINOR: mux-fcgi: Handle empty STDERR record As mentionned in the FastCGI specification, FCGI "streams" are series of non-empty stream records (length != 0), followed by an empty one. It is properly handled for FCGI_STDOUT records, but not for FCGI_STDERR ones. If an empty FCGI_STDERR record is received, the connection is blocked waiting for data which will never come. To fix the bug, when an empty FCGI_STDERR record is received, we drop it, eating the padding if any. This patch should fix the issue #743. It must be backported as far as 2.1. (cherry picked from commit 7f85433a912529c5cda1629001b34fd2b2e54758) Signed-off-by: Willy Tarreau (cherry picked from commit bd6dc07038f4c6b552559ccde41d31ff9a7dbf6d) Signed-off-by: Christopher Faulet --- diff --git a/src/mux_fcgi.c b/src/mux_fcgi.c index 4fb1444..30cefa7 100644 --- a/src/mux_fcgi.c +++ b/src/mux_fcgi.c @@ -2372,7 +2372,7 @@ static int fcgi_strm_handle_stderr(struct fcgi_conn *fconn, struct fcgi_strm *fs dbuf = &fconn->dbuf; /* Only padding remains */ - if (fconn->state == FCGI_CS_RECORD_P) + if (fconn->state == FCGI_CS_RECORD_P || !fconn->drl) goto end_transfer; if (b_data(dbuf) < (fconn->drl + fconn->drp) &&