From: Vsevolod Stakhov Date: Mon, 11 Apr 2016 16:05:42 +0000 (+0100) Subject: [CritFix] Fix regexps results combination X-Git-Tag: 1.2.3~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c1d7f95f5a1685d8ef9fa69a3da4f39bfe57a812;p=thirdparty%2Frspamd.git [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. --- 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 ++) {