]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Fix mail_search_args_simplify() to not deinit too many args
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 7 Jun 2017 16:37:46 +0000 (19:37 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Wed, 14 Jun 2017 08:30:34 +0000 (11:30 +0300)
Removing an arg should deinit it, but not its following siblings.

src/lib-storage/mail-search-args-simplify.c

index 154383d7497bac6a7948ab498c8be5f36265f73e..cc6a944bf444c3333c9d60ac82937cdc05c4f73c 100644 (file)
@@ -98,7 +98,7 @@ mail_search_args_merge_mask(struct mail_search_simplify_ctx *ctx,
                return FALSE;
        }
        if (ctx->initialized)
-               mail_search_arg_deinit(*prev_argp);
+               mail_search_arg_one_deinit(*prev_argp);
 
        if ((*prev_argp)->match_not != args->match_not) {
                /* a && !a = 0 */
@@ -341,7 +341,7 @@ mail_search_args_remove_equal(struct mail_search_args *all_args,
        for (argp = argsp; (*argp) != NULL; ) {
                if (mail_search_arg_one_equals(*argp, wanted_arg)) {
                        if (all_args->init_refcount > 0)
-                               mail_search_arg_deinit(*argp);
+                               mail_search_arg_one_deinit(*argp);
                        *argp = (*argp)->next;
                        found = TRUE;
                } else if (check_subs) {
@@ -428,7 +428,7 @@ mail_search_args_simplify_drop_redundant_args(struct mail_search_args *all_args,
                    (*argp)->value.subargs != lowest_arg &&
                    mail_search_args_have_all_equal(*argp, lowest_arg)) {
                        if (all_args->init_refcount > 0)
-                               mail_search_arg_deinit(*argp);
+                               mail_search_arg_one_deinit(*argp);
                        *argp = (*argp)->next;
                        ret = TRUE;
                } else {