Mercurial > dovecot > core-2.2
changeset 13565:1fd1321e55f4
imap: Memory leak fixes for invalid parameter handling.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 30 Sep 2011 19:02:31 +0300 |
parents | 5726f89486a0 |
children | c9894346b1a3 |
files | src/imap/cmd-copy.c src/imap/cmd-expunge.c src/imap/cmd-store.c src/imap/imap-search-args.c |
diffstat | 4 files changed, 15 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/imap/cmd-copy.c Fri Sep 30 18:53:09 2011 +0300 +++ b/src/imap/cmd-copy.c Fri Sep 30 19:02:31 2011 +0300 @@ -106,8 +106,10 @@ 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 |
--- a/src/imap/cmd-expunge.c Fri Sep 30 18:53:09 2011 +0300 +++ b/src/imap/cmd-expunge.c Fri Sep 30 19:02:31 2011 +0300 @@ -23,15 +23,17 @@ 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;
--- a/src/imap/cmd-store.c Fri Sep 30 18:53:09 2011 +0300 +++ b/src/imap/cmd-store.c Fri Sep 30 19:02:31 2011 +0300 @@ -149,10 +149,13 @@ 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
--- a/src/imap/imap-search-args.c Fri Sep 30 18:53:09 2011 +0300 +++ b/src/imap/imap-search-args.c Fri Sep 30 19:02:31 2011 +0300 @@ -117,6 +117,7 @@ !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; @@ -135,6 +136,7 @@ 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; }