if (ret <= 0)
return ret < 0;
- if (client_open_save_dest_box(cmd, mailbox, &destbox) < 0)
+ if (client_open_save_dest_box(cmd, mailbox, &destbox) < 0) {
+ mail_search_args_unref(&search_args);
return TRUE;
+ }
t = mailbox_transaction_begin(destbox,
MAILBOX_TRANSACTION_FLAG_EXTERNAL |
struct mail_search_args *search_args)
{
struct client *client = cmd->client;
+ int ret;
- if (imap_expunge(client->mailbox, search_args == NULL ? NULL :
- search_args->args) < 0) {
+ ret = imap_expunge(client->mailbox, search_args == NULL ? NULL :
+ search_args->args);
+ if (search_args != NULL)
+ mail_search_args_unref(&search_args);
+ if (ret < 0) {
client_send_storage_error(cmd,
mailbox_get_storage(client->mailbox));
return TRUE;
}
- if (search_args != NULL)
- mail_search_args_unref(&search_args);
client->sync_seen_deletes = FALSE;
client->sync_seen_expunges = FALSE;
memset(&ctx, 0, sizeof(ctx));
ctx.cmd = cmd;
- if (!store_parse_args(&ctx, ++args))
+ if (!store_parse_args(&ctx, ++args)) {
+ mail_search_args_unref(&search_args);
return TRUE;
+ }
if (client->mailbox_examined) {
+ mail_search_args_unref(&search_args);
if (ctx.max_modseq < (uint64_t)-1)
reply = "NO CONDSTORE failed: Mailbox is read-only.";
else
!msgset_is_valid(&args->args->value.seqset,
cmd->client->messages_count)) {
*error_r = "Invalid messageset";
+ mail_search_args_unref(&args);
return -1;
}
*args_r = args;
p_array_init(&args->args->value.seqset, args->pool, 16);
if (imap_seq_set_parse(uidset, &args->args->value.seqset) < 0) {
*error_r = "Invalid uidset";
+ mail_search_args_unref(&args);
return -1;
}