From: Vsevolod Stakhov Date: Wed, 13 Apr 2016 13:50:38 +0000 (+0100) Subject: [Feature] Match the beginning of pattern as well X-Git-Tag: 1.2.4~48 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2c866f828334a0291b5d90763a09952adcb56c13;p=thirdparty%2Frspamd.git [Feature] Match the beginning of pattern as well --- diff --git a/src/libutil/multipattern.c b/src/libutil/multipattern.c index 229ef2a9b4..15c0d641b6 100644 --- a/src/libutil/multipattern.c +++ b/src/libutil/multipattern.c @@ -392,7 +392,7 @@ rspamd_multipattern_add_pattern (struct rspamd_multipattern *mp, #ifdef WITH_HYPERSCAN gchar *np; - gint fl = 0; + gint fl = HS_FLAG_SOM_LEFTMOST; if (mp->flags & RSPAMD_MULTIPATTERN_ICASE) { fl |= HS_FLAG_CASELESS; @@ -501,7 +501,7 @@ rspamd_multipattern_hs_cb (unsigned int id, struct rspamd_multipattern_cbdata *cbd = ud; gint ret; - ret = cbd->cb (cbd->mp, id, to, cbd->in, cbd->len, cbd->ud); + ret = cbd->cb (cbd->mp, id, from, to, cbd->in, cbd->len, cbd->ud); cbd->nfound ++; cbd->ret = ret; @@ -514,8 +514,11 @@ rspamd_multipattern_acism_cb (int strnum, int textpos, void *context) { struct rspamd_multipattern_cbdata *cbd = context; gint ret; + ac_trie_pat_t pat; - ret = cbd->cb (cbd->mp, strnum, textpos, cbd->in, cbd->len, cbd->ud); + pat = g_array_index (cbd->mp->pats, ac_trie_pat_t, strnum); + ret = cbd->cb (cbd->mp, strnum, textpos - pat.len, + textpos, cbd->in, cbd->len, cbd->ud); cbd->nfound ++; cbd->ret = ret; diff --git a/src/libutil/multipattern.h b/src/libutil/multipattern.h index c279771590..345bfe33f0 100644 --- a/src/libutil/multipattern.h +++ b/src/libutil/multipattern.h @@ -50,7 +50,8 @@ struct rspamd_multipattern; */ typedef gint (*rspamd_multipattern_cb_t) (struct rspamd_multipattern *mp, guint strnum, - gint textpos, + gint match_start, + gint match_pos, const gchar *text, gsize len, void *context);