diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-04-02 12:35:19 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2015-04-02 12:35:19 +0100 |
commit | eee2f2adaf4590013a09730f07afafc8a3a149cd (patch) | |
tree | 5eb6f4fa7034ca8067eeb6f00e367015d310da86 /src/libmime | |
parent | 063498ae63348de0c27eb0260cc7633bbc822df9 (diff) | |
download | rspamd-eee2f2adaf4590013a09730f07afafc8a3a149cd.tar.gz rspamd-eee2f2adaf4590013a09730f07afafc8a3a149cd.zip |
Fix normalization and tokenization.
Diffstat (limited to 'src/libmime')
-rw-r--r-- | src/libmime/message.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/src/libmime/message.c b/src/libmime/message.c index 2eac86ed2..dfef04ce8 100644 --- a/src/libmime/message.c +++ b/src/libmime/message.c @@ -1180,7 +1180,7 @@ rspamd_normalize_text_part (struct rspamd_task *task, struct sb_stemmer *stem = NULL; rspamd_fstring_t *w, stw; const guchar *r; - guint i; + guint i, nlen; GArray *tmp; if (part->language && part->language[0] != '\0' && part->is_utf) { @@ -1203,13 +1203,11 @@ rspamd_normalize_text_part (struct rspamd_task *task, r = sb_stemmer_stem (stem, w->begin, w->len); } - if (stem == NULL || r == NULL) { - stw.begin = rspamd_mempool_fstrdup (task->task_pool, w); - stw.len = w->len; - } - else { - stw.begin = rspamd_mempool_strdup (task->task_pool, r); - stw.len = strlen (r); + if (stem != NULL && r != NULL) { + nlen = strlen (r); + nlen = MIN (nlen, stw.len); + memcpy (stw.begin, r, nlen); + stw.len = nlen; } if (part->is_utf) { @@ -1218,9 +1216,8 @@ rspamd_normalize_text_part (struct rspamd_task *task, else { rspamd_str_lc (stw.begin, stw.len); } - g_array_append_val (part->normalized_words, stw); } - g_array_free (tmp, TRUE); + part->normalized_words = tmp; } if (stem != NULL) { |