dovecot-2.2: lib-fts: Snowball's sb_stemmer_stem() can only fail...

dovecot at dovecot.org dovecot at dovecot.org
Sat May 9 08:35:41 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/7de648f42bc0
changeset: 18561:7de648f42bc0
user:      Timo Sirainen <tss at iki.fi>
date:      Sat May 09 11:33:45 2015 +0300
description:
lib-fts: Snowball's sb_stemmer_stem() can only fail because it runs out of memory.

diffstat:

 src/lib-fts/fts-filter-stemmer-snowball.c |  19 ++++++++++++-------
 1 files changed, 12 insertions(+), 7 deletions(-)

diffs (36 lines):

diff -r b0a934361563 -r 7de648f42bc0 src/lib-fts/fts-filter-stemmer-snowball.c
--- 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


More information about the dovecot-cvs mailing list