]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Code cleanup - moved BODY/TEXT "" optimization to mail_search_args_simpl...
authorTimo Sirainen <tss@iki.fi>
Tue, 8 Dec 2015 10:55:40 +0000 (12:55 +0200)
committerTimo Sirainen <tss@iki.fi>
Tue, 8 Dec 2015 10:55:40 +0000 (12:55 +0200)
src/lib-storage/mail-search-args-simplify.c
src/lib-storage/mail-search-register-imap.c
src/lib-storage/test-mail-search-args-simplify.c

index 3d72f75859e87d26f302417d3f63441ccb942163..da906ec762d1b7afa61c7f790adeec2caaff813f 100644 (file)
@@ -540,11 +540,18 @@ mail_search_args_simplify_sub(struct mailbox *box, pool_t pool,
                case SEARCH_LARGER:
                        merged = mail_search_args_merge_size(&ctx, args);
                        break;
+               case SEARCH_BODY:
+               case SEARCH_TEXT:
+                       if (args->value.str[0] == '\0') {
+                               /* BODY "" and TEXT "" matches everything */
+                               args->type = SEARCH_ALL;
+                               ctx.removals = TRUE;
+                               break;
+                       }
+                       /* fall through */
                case SEARCH_HEADER:
                case SEARCH_HEADER_ADDRESS:
                case SEARCH_HEADER_COMPRESS_LWSP:
-               case SEARCH_BODY:
-               case SEARCH_TEXT:
                        merged = mail_search_args_merge_text(&ctx, args);
                        break;
                default:
index deeac841263585dbde4c01479d77741e6f983080..eca18fcfbf2f9f4e3887a1e7edab9121acdbace3 100644 (file)
@@ -277,12 +277,6 @@ arg_new_body(struct mail_search_build_context *ctx,
        if (mail_search_build_get_utf8(ctx, sarg->value.str,
                                       &sarg->value.str) < 0)
                return NULL;
-
-       if (sarg->value.str[0] == '\0') {
-               /* optimization: BODY "" matches everything
-                  (but do this only after checking charset and key are ok) */
-               return mail_search_build_new(ctx, SEARCH_ALL);
-       }
        return sarg;
 }
 
index a2592a78211696f0739bb1163f2fec35fe2d440f..c72dc9bbe74256deb156a8f8f4694e6ae064bfa6 100644 (file)
@@ -97,6 +97,16 @@ struct {
        { "TEXT foo BODY foo", "TEXT foo BODY foo" },
        { "OR ( TEXT foo OR TEXT foo TEXT foo ) ( TEXT foo ( TEXT foo ) )", "TEXT foo" },
 
+       /* value="" tests */
+       { "HEADER foo ", "HEADER FOO \"\"" },
+       { "SUBJECT ", "SUBJECT \"\"" },
+       { "BODY ", "ALL" },
+       { "TEXT ", "ALL" },
+       { "HEADER foo .", "HEADER FOO ." },
+       { "SUBJECT .", "SUBJECT ." },
+       { "BODY .", "BODY ." },
+       { "TEXT .", "TEXT ." },
+
        /* OR: drop redundant args */
        { "OR ( TEXT common1 TEXT unique1 ) TEXT common1", "TEXT common1" },
        { "OR ( TEXT unique1 TEXT common1 ) TEXT common1", "TEXT common1" },