]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts: Fix search query generation when one language ignores a token
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 18 Oct 2018 09:35:22 +0000 (12:35 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 18 Oct 2018 10:25:05 +0000 (10:25 +0000)
The search query was changed to "NOT ALL", even though other languages
used the token.

src/plugins/fts/fts-search-args.c

index 3dfdb4ef259c3fdf672d6c7d37f2f2eb6022eed4..3d7b68d8bc175cf70ce4cac894de3ee36e4d8538 100644 (file)
@@ -104,7 +104,7 @@ fts_backend_dovecot_tokenize_lang(struct fts_user_language *user_lang,
                                  const char *orig_token, const char **error_r)
 {
        size_t orig_token_len = strlen(orig_token);
-       struct mail_search_arg *and_arg;
+       struct mail_search_arg *and_arg, *orig_or_args = or_arg->value.subargs;
        const char *token, *error;
        int ret;
 
@@ -113,7 +113,7 @@ fts_backend_dovecot_tokenize_lang(struct fts_user_language *user_lang,
           it */
        and_arg = p_new(pool, struct mail_search_arg, 1);
        and_arg->type = SEARCH_SUB;
-       and_arg->next = or_arg->value.subargs;
+       and_arg->next = orig_or_args;
        or_arg->value.subargs = and_arg;
 
        /* reset tokenizer between search args in case there's any state left
@@ -140,7 +140,7 @@ fts_backend_dovecot_tokenize_lang(struct fts_user_language *user_lang,
        }
        if (and_arg->value.subargs == NULL) {
                /* nothing was actually expanded, remove the empty and_arg */
-               or_arg->value.subargs = NULL;
+               or_arg->value.subargs = orig_or_args;
        }
        return 0;
 }