BUG/MINOR: mux-fcgi: Handle empty STDERR record
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 15 Jul 2020 13:46:30 +0000 (15:46 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 15 Jul 2020 13:46:31 +0000 (15:46 +0200)
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.

src/mux_fcgi.c

index 58d4923..d1094d9 100644 (file)
@@ -2355,7 +2355,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) &&