]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: tcp-rules: tcp-response must check the buffer's fullness
authorWilly Tarreau <w@1wt.eu>
Mon, 15 Jun 2020 16:08:07 +0000 (18:08 +0200)
committerWilly Tarreau <w@1wt.eu>
Mon, 15 Jun 2020 16:16:20 +0000 (18:16 +0200)
It's unclear why the buffer length wasn't considered when tcp-response
rules were added in 1.5-dev3 with commit 97679e790 ("[MEDIUM] Implement
tcp inspect response rules"). But it's impossible to write working
tcp-response content rules as they're always waiting for the expiration
and do not consider the fact that the buffer is full. It's likely that
tcp-response content rules were only used with HTTP traffic.

This may be backported to stable versions, though it's not very
important considering that that nobody reported this in 10 years.

src/tcp_rules.c

index 703bd4fbbc89842ec7b62643259ebc52bdc54174..e09cc3c10a2b0d16fd0960da2561642cad6bf698 100644 (file)
@@ -260,8 +260,8 @@ int tcp_inspect_response(struct stream *s, struct channel *rep, int an_bit)
         * - if one rule returns OK, then return OK
         * - if one rule returns KO, then return KO
         */
-
-       if (rep->flags & CF_SHUTR || tick_is_expired(rep->analyse_exp, now_ms))
+       if ((rep->flags & CF_SHUTR) || channel_full(rep, global.tune.maxrewrite) ||
+           !s->be->tcp_rep.inspect_delay || tick_is_expired(rep->analyse_exp, now_ms))
                partial = SMP_OPT_FINAL;
        else
                partial = 0;