diff options
Diffstat (limited to 'src/libutil')
-rw-r--r-- | src/libutil/regexp.c | 25 | ||||
-rw-r--r-- | src/libutil/regexp.h | 10 |
2 files changed, 35 insertions, 0 deletions
diff --git a/src/libutil/regexp.c b/src/libutil/regexp.c index 584c0c5c9..46ed9a0df 100644 --- a/src/libutil/regexp.c +++ b/src/libutil/regexp.c @@ -66,6 +66,7 @@ struct rspamd_regexp_s { gpointer ud; gpointer re_class; guint64 cache_id; + gsize match_limit; guint max_hits; gint flags; gint pcre_flags; @@ -567,6 +568,10 @@ rspamd_regexp_search (const rspamd_regexp_t *re, const gchar *text, gsize len, len = strlen (text); } + if (re->match_limit > 0 && len > re->match_limit) { + len = re->match_limit; + } + if (end != NULL && *end != NULL) { /* Incremental search */ mt = (*end); @@ -889,6 +894,26 @@ rspamd_regexp_set_cache_id (rspamd_regexp_t *re, guint64 id) return old; } +gsize +rspamd_regexp_get_match_limit (const rspamd_regexp_t *re) +{ + g_assert (re != NULL); + + return re->match_limit; +} + +gsize +rspamd_regexp_set_match_limit (rspamd_regexp_t *re, gsize lim) +{ + gsize old; + + g_assert (re != NULL); + old = re->match_limit; + re->match_limit = lim; + + return old; +} + gboolean rspamd_regexp_match (const rspamd_regexp_t *re, const gchar *text, gsize len, gboolean raw) diff --git a/src/libutil/regexp.h b/src/libutil/regexp.h index 1e98b7b3c..3437619d1 100644 --- a/src/libutil/regexp.h +++ b/src/libutil/regexp.h @@ -182,6 +182,16 @@ guint64 rspamd_regexp_get_cache_id (const rspamd_regexp_t *re); guint64 rspamd_regexp_set_cache_id (rspamd_regexp_t *re, guint64 id); /** + * Returns match limit for a regexp + */ +gsize rspamd_regexp_get_match_limit (const rspamd_regexp_t *re); + +/** + * Sets cache id for a regexp + */ +gsize rspamd_regexp_set_match_limit (rspamd_regexp_t *re, gsize lim); + +/** * Get regexp class for the re object */ gpointer rspamd_regexp_get_class (const rspamd_regexp_t *re); |