dovecot-2.2: fts: Avoid excessive data stack usage with lib-fts
dovecot at dovecot.org
dovecot at dovecot.org
Sat May 16 15:49:28 UTC 2015
details: http://hg.dovecot.org/dovecot-2.2/rev/a7175a018348
changeset: 18718:a7175a018348
user: Timo Sirainen <tss at iki.fi>
date: Sat May 16 18:20:08 2015 +0300
description:
fts: Avoid excessive data stack usage with lib-fts
diffstat:
src/plugins/fts/fts-build-mail.c | 27 ++++++++++++---------------
1 files changed, 12 insertions(+), 15 deletions(-)
diffs (40 lines):
diff -r 5c905c8afb02 -r a7175a018348 src/plugins/fts/fts-build-mail.c
--- a/src/plugins/fts/fts-build-mail.c Sat May 16 13:50:48 2015 +0300
+++ b/src/plugins/fts/fts-build-mail.c Sat May 16 18:20:08 2015 +0300
@@ -265,24 +265,21 @@
{
struct fts_tokenizer *tokenizer;
struct fts_filter *filter = ctx->cur_user_lang->filter;
- const char *token;
- const char *error;
- int ret;
+ const char *token, *error;
+ int ret = 1, ret2;
tokenizer = fts_user_get_index_tokenizer(ctx->update_ctx->backend->ns->user);
- while ((ret = fts_tokenizer_next(tokenizer, data, size, &token, &error)) > 0) {
- if (filter != NULL) {
- ret = fts_filter_filter(filter, &token, &error);
- if (ret == 0)
- continue;
- if (ret < 0)
- break;
+ while (ret > 0) T_BEGIN {
+ ret = ret2 = fts_tokenizer_next(tokenizer, data, size, &token, &error);
+ if (ret2 > 0 && filter != NULL)
+ ret2 = fts_filter_filter(filter, &token, &error);
+ if (ret2 > 0) {
+ if (fts_backend_update_build_more(ctx->update_ctx,
+ (const void *)token,
+ strlen(token)) < 0)
+ ret = -1;
}
- if (fts_backend_update_build_more(ctx->update_ctx,
- (const void *)token,
- strlen(token)) < 0)
- return -1;
- }
+ } T_END;
if (ret < 0)
i_error("fts: Couldn't create indexable tokens: %s", error);
return ret;
More information about the dovecot-cvs
mailing list