]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: mux-h1/mux-fcgi: Don't needlessly loop on data parsing
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 2 Feb 2021 20:16:03 +0000 (21:16 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Tue, 25 May 2021 08:41:50 +0000 (10:41 +0200)
Because the function parsing H1 data is now able to handle wrapping input
buffers, there is no reason to loop anymore in the muxes to be sure to parse
wrapping data.

src/mux_fcgi.c
src/mux_h1.c

index 5985c04fd8a3a73241911863420ea9aaacb9e3a2..bc9d0232c5fc972d40b45106dea5acc0f4059509 100644 (file)
@@ -3420,7 +3420,7 @@ static size_t fcgi_strm_parse_response(struct fcgi_strm *fstrm, struct buffer *b
                                TRACE_USER("H1 response fully rcvd", FCGI_EV_RSP_DATA|FCGI_EV_RSP_EOM, fconn->conn, fstrm, htx);
                        }
 
-                       if (!ret && h1m->state != H1_MSG_DONE)
+                       if (h1m->state < H1_MSG_TRAILERS)
                                break;
 
                        TRACE_PROTO("rcvd response payload data", FCGI_EV_RSP_DATA|FCGI_EV_RSP_BODY, fconn->conn, fstrm, htx);
@@ -3428,7 +3428,7 @@ static size_t fcgi_strm_parse_response(struct fcgi_strm *fstrm, struct buffer *b
                else if (h1m->state == H1_MSG_TRAILERS) {
                        TRACE_PROTO("parsing response trailers", FCGI_EV_RSP_DATA|FCGI_EV_RSP_TLRS, fconn->conn, fstrm);
                        ret = fcgi_strm_parse_trailers(fstrm, h1m, htx, &fstrm->rxbuf, &total, count);
-                       if (!ret && h1m->state != H1_MSG_DONE)
+                       if (h1m->state != H1_MSG_DONE)
                                break;
 
                        TRACE_PROTO("rcvd H1 response trailers", FCGI_EV_RSP_DATA|FCGI_EV_RSP_TLRS, fconn->conn, fstrm, htx);
index 0b75dbb7a86514d6e0cee8370190409950add3c3..b90e11c9e440f89487fc58c09e6ffeaa936fb864 100644 (file)
@@ -1553,7 +1553,7 @@ static size_t h1_process_input(struct h1c *h1c, struct buffer *buf, size_t count
                else if (h1m->state < H1_MSG_TRAILERS) {
                        TRACE_PROTO("parsing message payload", H1_EV_RX_DATA|H1_EV_RX_BODY, h1c->conn, h1s);
                        ret = h1_process_data(h1s, h1m, &htx, &h1c->ibuf, &total, count, buf);
-                       if (!ret && h1m->state != H1_MSG_DONE)
+                       if (h1m->state < H1_MSG_TRAILERS)
                                break;
 
                        TRACE_PROTO((!(h1m->flags & H1_MF_RESP) ? "rcvd H1 request payload data" : "rcvd H1 response payload data"),
@@ -1562,7 +1562,7 @@ static size_t h1_process_input(struct h1c *h1c, struct buffer *buf, size_t count
                else if (h1m->state == H1_MSG_TRAILERS) {
                        TRACE_PROTO("parsing message trailers", H1_EV_RX_DATA|H1_EV_RX_TLRS, h1c->conn, h1s);
                        ret = h1_process_trailers(h1s, h1m, htx, &h1c->ibuf, &total, count);
-                       if (!ret && h1m->state != H1_MSG_DONE)
+                       if (h1m->state != H1_MSG_DONE)
                                break;
 
                        TRACE_PROTO((!(h1m->flags & H1_MF_RESP) ? "rcvd H1 request trailers" : "rcvd H1 response trailers"),