changeset 22199:83955bbf1b3a

lib-storage: Fix mail_search_args_simplify() to not deinit too many args Removing an arg should deinit it, but not its following siblings.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Wed, 07 Jun 2017 19:37:46 +0300
parents 5eee5c1e815e
children 171b3599cc0f
files src/lib-storage/mail-search-args-simplify.c
diffstat 1 files changed, 3 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/mail-search-args-simplify.c	Wed Jun 07 19:36:19 2017 +0300
+++ b/src/lib-storage/mail-search-args-simplify.c	Wed Jun 07 19:37:46 2017 +0300
@@ -98,7 +98,7 @@
 		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 @@
 	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 @@
 		    (*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 {