From c1d7f95f5a1685d8ef9fa69a3da4f39bfe57a812 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 11 Apr 2016 17:05:42 +0100 Subject: [PATCH] [CritFix] Fix regexps results combination When converting to vectored mode we need to remember results between consequent calls of regexp match engine. Prior to this patch this behaviour was broken and caused regexp rules to be matched incorrectly. --- src/libserver/re_cache.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/libserver/re_cache.c b/src/libserver/re_cache.c index 2e3a2ff653..41f942f22f 100644 --- a/src/libserver/re_cache.c +++ b/src/libserver/re_cache.c @@ -467,6 +467,10 @@ rspamd_re_cache_process_pcre (struct rspamd_re_runtime *rt, gdouble t1, t2; const gdouble slow_time = 0.1; + if (in == NULL) { + return rt->results[id]; + } + if (len == 0) { len = strlen (in); } @@ -605,9 +609,10 @@ rspamd_re_cache_process_regexp_data (struct rspamd_re_runtime *rt, in[i], lens[i], is_raw); + rt->results[re_id] = ret; } + setbit (rt->checked, re_id); - rt->results[re_id] = ret; #else struct rspamd_re_cache_elt *elt; struct rspamd_re_class *re_class; @@ -624,10 +629,10 @@ rspamd_re_cache_process_regexp_data (struct rspamd_re_runtime *rt, in[i], lens[i], is_raw); + rt->results[re_id] = ret; } setbit (rt->checked, re_id); - rt->results[re_id] = ret; } else { for (i = 0; i < count; i ++) { -- 2.47.3