From: Timo Sirainen Date: Wed, 9 Dec 2015 11:51:35 +0000 (+0200) Subject: lib-storage: Fixed mail_search_args_simplify() with empty args. X-Git-Tag: 2.2.21~10 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=02b51cddfb244fbe3972b12fb3e05183e38879d8;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Fixed mail_search_args_simplify() with empty args. This fixes assert-crash in doveadm mailbox list. --- diff --git a/src/lib-storage/mail-search-args-simplify.c b/src/lib-storage/mail-search-args-simplify.c index 8413ff188a..5dfc1605c5 100644 --- a/src/lib-storage/mail-search-args-simplify.c +++ b/src/lib-storage/mail-search-args-simplify.c @@ -344,6 +344,9 @@ mail_search_args_simplify_drop_redundent_args(struct mail_search_arg **argsp, unsigned int count, lowest_count = UINT_MAX; bool ret = FALSE; + if (*argsp == NULL) + return FALSE; + child_subargs_type = and_arg ? SEARCH_OR : SEARCH_SUB; /* find the arg which has the lowest number of child args */ @@ -399,7 +402,7 @@ mail_search_args_simplify_extract_common(struct mail_search_arg **argsp, struct mail_search_arg *new_arg, *child_arg, *common_args = NULL; enum mail_search_arg_type child_subargs_type; - if ((*argsp)->next == NULL) { + if (*argsp == NULL || (*argsp)->next == NULL) { /* single arg, nothing to extract */ return FALSE; } diff --git a/src/lib-storage/test-mail-search-args-simplify.c b/src/lib-storage/test-mail-search-args-simplify.c index 9ba5ca719c..80686e5985 100644 --- a/src/lib-storage/test-mail-search-args-simplify.c +++ b/src/lib-storage/test-mail-search-args-simplify.c @@ -202,10 +202,24 @@ static void test_mail_search_args_simplify(void) test_end(); } +static void test_mail_search_args_simplify_empty_lists(void) +{ + struct mail_search_args *args; + + test_begin("mail search args simplify empty args"); + + args = mail_search_build_init(); + mail_search_args_simplify(args); + mail_search_args_unref(&args); + + test_end(); +} + int main(void) { static void (*test_functions[])(void) = { test_mail_search_args_simplify, + test_mail_search_args_simplify_empty_lists, NULL };