From: Christopher Faulet Date: Wed, 12 Feb 2020 14:31:20 +0000 (+0100) Subject: BUG/MINOR: filters: Count HTTP headers as filtered data but don't forward them X-Git-Tag: v2.2-dev3~57 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9c44e4813cbd3c0f7ed6e2840342d45dea9ed4ff;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/filters.c b/src/filters.c index ce6a78e05a..afe8c13d9f 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);