mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-05-04 20:46:11 +02:00
BUG/MEDIUM: http-ana: Truncate the response when a redirect rule is applied
When a redirect rule is executed on the response path, we must truncate the received response. Otherwise, the redirect is appended after the response, which is sent to the client. So it is obviously a bug because the redirect is not performed. With bodyless responses, it is the "only" bug. But if the response has a body, the result may be invalid. If the payload is not fully received yet when the redirect is performed, an internal error is reported. It must be backported as far as 1.9.
This commit is contained in:
parent
47a7210b9d
commit
96b363963f
@ -2526,6 +2526,8 @@ int http_apply_redirect_rule(struct redirect_rule *rule, struct stream *s, struc
|
||||
close = 1;
|
||||
|
||||
htx = htx_from_buf(&res->buf);
|
||||
/* Trim any possible response */
|
||||
channel_htx_truncate(&s->res, htx);
|
||||
flags = (HTX_SL_F_IS_RESP|HTX_SL_F_VER_11|HTX_SL_F_XFER_LEN|HTX_SL_F_BODYLESS);
|
||||
sl = htx_add_stline(htx, HTX_BLK_RES_SL, flags, ist("HTTP/1.1"), status, reason);
|
||||
if (!sl)
|
||||
@ -2553,6 +2555,8 @@ int http_apply_redirect_rule(struct redirect_rule *rule, struct stream *s, struc
|
||||
if (!htx_add_endof(htx, HTX_BLK_EOH) || !htx_add_endof(htx, HTX_BLK_EOM))
|
||||
goto fail;
|
||||
|
||||
htx_to_buf(htx, &res->buf);
|
||||
|
||||
/* let's log the request time */
|
||||
s->logs.tv_request = now;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user