Mercurial > dovecot > core-2.2
changeset 18718:a7175a018348
fts: Avoid excessive data stack usage with lib-fts
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 16 May 2015 18:20:08 +0300 |
parents | 5c905c8afb02 |
children | 3deb3fd654c6 |
files | src/plugins/fts/fts-build-mail.c |
diffstat | 1 files changed, 12 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- 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;