Mercurial > dovecot > core-2.2
changeset 18561:7de648f42bc0
lib-fts: Snowball's sb_stemmer_stem() can only fail because it runs out of memory.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 09 May 2015 11:33:45 +0300 |
parents | b0a934361563 |
children | cfa35069876b |
files | src/lib-fts/fts-filter-stemmer-snowball.c |
diffstat | 1 files changed, 12 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-fts/fts-filter-stemmer-snowball.c Sat May 09 11:17:03 2015 +0300 +++ b/src/lib-fts/fts-filter-stemmer-snowball.c Sat May 09 11:33:45 2015 +0300 @@ -81,20 +81,25 @@ fts_filter_stemmer_snowball_filter(struct fts_filter *filter, const char **token) { - const sb_symbol *base; - int len; struct fts_filter_stemmer_snowball *sp = (struct fts_filter_stemmer_snowball *) filter; + const sb_symbol *base; - if (sp->stemmer == NULL) + if (sp->stemmer == NULL) { if (fts_filter_stemmer_snowball_create_stemmer(sp) < 0) return -1; + } base = sb_stemmer_stem(sp->stemmer, (const unsigned char *)*token, strlen(*token)); - len = sb_stemmer_length(sp->stemmer); - *token = t_strdup_until(base, base + len); - - return *token != NULL? 1: -1; + if (base == NULL) { + /* the only reason why this could fail is because of + out of memory. */ + i_fatal_status(FATAL_OUTOFMEM, + "sb_stemmer_stem(len=%"PRIuSIZE_T") failed: " + "Out of memory", strlen(*token)); + } + *token = t_strndup(base, sb_stemmer_length(sp->stemmer)); + return 1; } #else