From: Christopher Faulet Date: Thu, 20 May 2021 16:00:55 +0000 (+0200) Subject: BUG/MEDIUM: filters: Exec pre/post analysers only one time per filter X-Git-Tag: v2.5-dev1~247 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a6d3704e38b6c1cb09286e9778b6363825d65c4d;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: filters: Exec pre/post analysers only one time per filter For each filter, pre and post callback functions must only be called one time. To do so, when one of them is finished, the corresponding analyser bit must be removed from pre_analyzers or post_analyzers bit field. It is only an issue with pre-analyser callback functions if the corresponding analyser yields. It may happens with lua action for instance. In this case, the filters pre analyser callback function is unexpectedly called several times. This patch should fix the issue #1263. It must be backported is all stable versions. --- diff --git a/src/filters.c b/src/filters.c index b684b44da4..99b44e06e2 100644 --- a/src/filters.c +++ b/src/filters.c @@ -757,6 +757,7 @@ flt_pre_analyze(struct stream *s, struct channel *chn, unsigned int an_bit) ret = FLT_OPS(filter)->channel_pre_analyze(s, filter, chn, an_bit); if (ret <= 0) BREAK_EXECUTION(s, chn, check_result); + filter->pre_analyzers &= ~an_bit; } } RESUME_FILTER_END; @@ -789,6 +790,7 @@ flt_post_analyze(struct stream *s, struct channel *chn, unsigned int an_bit) ret = FLT_OPS(filter)->channel_post_analyze(s, filter, chn, an_bit); if (ret < 0) break; + filter->post_analyzers &= ~an_bit; } } ret = handle_analyzer_result(s, chn, 0, ret);