]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Fix searching when search query has invalid keywords.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 27 Apr 2017 09:53:18 +0000 (12:53 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 27 Apr 2017 09:53:18 +0000 (12:53 +0300)
For example "SEARCH KEYWORD ]" was returning all mails instead of nothing.

src/lib-storage/index/index-search.c
src/lib-storage/mail-search.h

index b8f2f3ba9f0e7e9dba4a16ae877977746c01f463..04c643f6629b1513cc25d4203ecd3d12c58569b7 100644 (file)
@@ -159,6 +159,11 @@ static int search_arg_match_keywords(struct index_search_context *ctx,
        const unsigned int *keyword_indexes;
        unsigned int i, j, count;
 
+       if (search_kws->count == 0) {
+               /* invalid keyword - never matches */
+               return 0;
+       }
+
        t_array_init(&keyword_indexes_arr, 128);
        mail_index_lookup_keywords(ctx->view, ctx->mail_ctx.seq,
                                   &keyword_indexes_arr);
index b98d6004daad9b67823e8f1b03c5344607bd8d0e..83d4dc9e51499941d5aefd773bca7a1d862ec2e8 100644 (file)
@@ -109,6 +109,8 @@ struct mail_search_arg {
        /* set by mail_search_args_init(): */
        struct {
                struct mail_search_args *search_args;
+               /* Note that initialized keywords may be empty if the keyword
+                  wasn't valid in this mailbox. */
                struct mail_keywords *keywords;
                struct imap_match_glob *mailbox_glob;
        } initialized;