From 9c44e4813cbd3c0f7ed6e2840342d45dea9ed4ff Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Wed, 12 Feb 2020 15:31:20 +0100 Subject: [PATCH] BUG/MINOR: filters: Count HTTP headers as filtered data but don't forward them In flt_analyze_http_headers() HTTP analyzer, we must not forward systematically the headers. We must only count them as filtered data (ie. increment the offset of the right size). It is the http_payload callback responsibility to decide to forward headers or not by forwarding at least 1 byte of payload. And there is always at least 1 byte of payload to forward, the EOM block. This patch depends on following commits: * MINOR: filters: Forward data only if the last filter forwards something * MINOR: http-htx: Add a function to retrieve the headers size of an HTX message This patch must be backported with commits above as far as 1.9. In HAProxy 2.0 and 1.9, the patch must be adapted because of the legacy HTTP code. --- src/filters.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/filters.c b/src/filters.c index ce6a78e05..afe8c13d9 100644 --- a/src/filters.c +++ b/src/filters.c @@ -774,7 +774,16 @@ flt_analyze_http_headers(struct stream *s, struct channel *chn, unsigned int an_ BREAK_EXECUTION(s, chn, check_result); } } RESUME_FILTER_END; - channel_htx_fwd_headers(chn, htxbuf(&chn->buf)); + + if (HAS_DATA_FILTERS(s, chn)) { + size_t data = http_get_hdrs_size(htxbuf(&chn->buf)); + struct filter *f; + + list_for_each_entry(f, &strm_flt(s)->filters, list) { + if (IS_DATA_FILTER(f, chn)) + FLT_OFF(f, chn) = data; + } + } check_result: ret = handle_analyzer_result(s, chn, an_bit, ret);