summaryrefslogtreecommitdiffstats
path: root/src/libmime
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-04-02 12:35:19 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-04-02 12:35:19 +0100
commiteee2f2adaf4590013a09730f07afafc8a3a149cd (patch)
tree5eb6f4fa7034ca8067eeb6f00e367015d310da86 /src/libmime
parent063498ae63348de0c27eb0260cc7633bbc822df9 (diff)
downloadrspamd-eee2f2adaf4590013a09730f07afafc8a3a149cd.tar.gz
rspamd-eee2f2adaf4590013a09730f07afafc8a3a149cd.zip
Fix normalization and tokenization.
Diffstat (limited to 'src/libmime')
-rw-r--r--src/libmime/message.c17
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) {