memset(&ctx, 0, sizeof(ctx));
ctx.update_ctx = update_ctx;
ctx.mail = mail;
- if ((update_ctx->backend->flags & FTS_BACKEND_FLAG_TOKENIZED_INPUT) != 0)
+ if ((update_ctx->backend->flags & FTS_BACKEND_FLAG_TOKENIZED_INPUT) != 0) {
ctx.pending_input = buffer_create_dynamic(default_pool, 128);
+ /* reset tokenizer between mails - just to be sure no state
+ leaks between mails (especially if previous indexing had
+ failed) */
+ struct fts_tokenizer *tokenizer;
+
+ tokenizer = fts_user_get_index_tokenizer(update_ctx->backend->ns->user);
+ fts_tokenizer_reset(tokenizer);
+ }
prev_part = NULL;
parser = message_parser_init(pool_datastack_create(), input,
and_arg->match_not = orig_arg->match_not;
and_arg->next = orig_arg->next;
+ /* reset tokenizer between search args in case there's any state left
+ from some previous failure */
+ fts_tokenizer_reset(tokenizer);
while (fts_tokenizer_next(tokenizer,
(const void *)orig_token,
orig_token_len, &token) > 0) {