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:
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;
}
{ "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" },