aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver/re_cache.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-12-14 13:08:14 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-12-14 13:08:14 +0000
commit7055b8410da2bbb1bf06d6a276ba91b45f6f3a08 (patch)
tree37f280189cb3942e9d2d0644559287aa4201f6fd /src/libserver/re_cache.c
parent59d171d45d642804f469a7ad82ec073478e26418 (diff)
downloadrspamd-7055b8410da2bbb1bf06d6a276ba91b45f6f3a08.tar.gz
rspamd-7055b8410da2bbb1bf06d6a276ba91b45f6f3a08.zip
Assume empty input as failed scan
Diffstat (limited to 'src/libserver/re_cache.c')
-rw-r--r--src/libserver/re_cache.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/libserver/re_cache.c b/src/libserver/re_cache.c
index 95d64edf9..63af03202 100644
--- a/src/libserver/re_cache.c
+++ b/src/libserver/re_cache.c
@@ -529,12 +529,19 @@ rspamd_re_cache_process_regexp_data (struct rspamd_re_runtime *rt,
struct rspamd_re_cache_elt *elt;
struct rspamd_re_class *re_class;
guint64 re_id;
- guint ret;
+ guint ret = 0;
re_id = rspamd_regexp_get_cache_id (re);
elt = g_ptr_array_index (rt->cache->re, re_id);
re_class = rspamd_regexp_get_class (re);
+ if (len == 0 || in == NULL) {
+ /* We assume this as absence of the specified data */
+ setbit (rt->checked, re_id);
+ rt->results[re_id] = ret;
+ return ret;
+ }
+
#ifndef WITH_HYPERSCAN
ret = rspamd_re_cache_process_pcre (rt, re, in, len, is_raw);
setbit (rt->checked, re_id);
@@ -548,10 +555,6 @@ rspamd_re_cache_process_regexp_data (struct rspamd_re_runtime *rt,
rt->results[re_id] = ret;
}
else {
- if (len == 0) {
- len = strlen (in);
- }
-
if (rt->cache->max_re_data > 0 && len > rt->cache->max_re_data) {
len = rt->cache->max_re_data;
}