From e8179ea8ad6e2bde69ec717c7b98c1d97eb10fe2 Mon Sep 17 00:00:00 2001 From: Alex 'AdUser' Z Date: Wed, 26 May 2021 11:55:41 +1000 Subject: [PATCH] * save order for patterns in filters on load --- src/filters/pcre.c | 11 +++++++++-- src/filters/preg.c | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/filters/pcre.c b/src/filters/pcre.c index a3e0eac..87b6aaa 100644 --- a/src/filters/pcre.c +++ b/src/filters/pcre.c @@ -24,6 +24,7 @@ struct _regexp { struct _config { void (*logcb)(enum loglevel lvl, const char *msg); rx_t *regexps; + rx_t *rlast; /* pointer to last regex in list */ int flags; short int defscore; bool icase; @@ -133,9 +134,14 @@ append(cfg_t *cfg, const char *pattern) { regex->score = cfg->defscore; regex->ftag = fnv_32a_str(pattern, FNV1_32A_INIT); - regex->next = cfg->regexps; - cfg->regexps = regex; strlcpy(regex->pattern, pattern, sizeof(regex->pattern)); + /* update regex list */ + if (cfg->rlast) { + cfg->rlast->next = regex; + } else { + cfg->regexps = regex; + } + cfg->rlast = regex; cfg->flags |= MOD_IS_READY; return true; } @@ -193,6 +199,7 @@ flush(cfg_t *cfg) { free(r); } cfg->regexps = NULL; + cfg->rlast = NULL; cfg->defscore = MATCH_DEFSCORE; } diff --git a/src/filters/preg.c b/src/filters/preg.c index cce66e1..b7c0bc2 100644 --- a/src/filters/preg.c +++ b/src/filters/preg.c @@ -24,6 +24,7 @@ struct _regexp { struct _config { rx_t *regexps; + rx_t *rlast; /* pointer to last regex in list */ void (*logcb)(enum loglevel lvl, const char *msg); short int defscore; int flags; @@ -97,9 +98,14 @@ append(cfg_t *cfg, const char *pattern) { if ((ret = regcomp(®ex->regex, buf, flags)) == 0) { regex->score = cfg->defscore; regex->ftag = fnv_32a_str(pattern, FNV1_32A_INIT); - regex->next = cfg->regexps; - cfg->regexps = regex; strlcpy(regex->pattern, pattern, sizeof(regex->pattern)); + /* update regex list */ + if (cfg->rlast) { + cfg->rlast->next = regex; + } else { + cfg->regexps = regex; + } + cfg->rlast = regex; cfg->flags |= MOD_IS_READY; return true; } else { @@ -150,6 +156,7 @@ flush(cfg_t *cfg) { free(r); } cfg->regexps = NULL; + cfg->rlast = NULL; cfg->defscore = MATCH_DEFSCORE; }