]> git.ipfire.org Git - thirdparty/haproxy.git/commit
BUG/MEDIUM: stats: Consume the request except when parsing the POST payload
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 22 Mar 2023 08:30:40 +0000 (09:30 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 24 Mar 2023 08:24:27 +0000 (09:24 +0100)
commitc2c043ed43b1812a29df59a0aadc8ea7f26f6fec
tree3d118226b5626fd38d66895811a183d524817065
parent3aeb36681ca5925cbb9b4a065671d7740093a9a8
BUG/MEDIUM: stats: Consume the request except when parsing the POST payload

The stats applet is designed to consume the request at the end, when it
finishes to send the response. And during the response forwarding, because
the request is not consumed, the applet states it will not consume
data. This avoid to wake the applet up in loop. When it finishes to send the
response, the request is consumed.

For POST requests, there is no issue because the response is small
enough. It is sent in one time and must be processed by HTTP analyzers. Thus
the forwarding is not performed by the applet itself. The applet is always
able to consume the request, regardless the payload length.

But for other requests, it may be an issue. If the response is too big to be
sent in one time and if the requests is not fully received when the response
headers are sent, the applet may be blocked infinitely, not consuming the
request. Indeed, in the case the applet will be switched in infinite forward
mode, the request will not be consumed immediately. At the end, the request
buffer is flushed. But if some data must still be received, the applet is not
woken up because it is still in a "not-consuming" mode.

So, to fix the issue, we must take care to re-enable data consuming when the
end of the response is reached.

This patch must be backported as far as 2.6.
src/stats.c