dovecot: Don't access freed memory. Caused crashes sometimes.

dovecot at dovecot.org dovecot at dovecot.org
Sat Sep 15 15:58:31 EEST 2007


details:   http://hg.dovecot.org/dovecot/rev/799b6c593cad
changeset: 6392:799b6c593cad
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Sep 15 15:54:11 2007 +0300
description:
Don't access freed memory. Caused crashes sometimes.

diffstat:

1 file changed, 4 insertions(+), 5 deletions(-)
src/lib-storage/index/maildir/maildir-save.c |    9 ++++-----

diffs (29 lines):

diff -r c5cff3c6828a -r 799b6c593cad src/lib-storage/index/maildir/maildir-save.c
--- a/src/lib-storage/index/maildir/maildir-save.c	Sat Sep 15 15:29:16 2007 +0300
+++ b/src/lib-storage/index/maildir/maildir-save.c	Sat Sep 15 15:54:11 2007 +0300
@@ -670,6 +670,9 @@ int maildir_transaction_save_commit_pre(
 			ret = -1;
 	}
 
+	*t->ictx.saved_uid_validity =
+		maildir_uidlist_get_uid_validity(ctx->mbox->uidlist);
+
 	if (sync_commit) {
 		/* It doesn't matter if index syncing fails */
 		(void)maildir_sync_index_finish(&ctx->sync_ctx,
@@ -698,14 +701,10 @@ int maildir_transaction_save_commit_pre(
 
 void maildir_transaction_save_commit_post(struct maildir_save_context *ctx)
 {
-	struct maildir_transaction_context *t =
-		(struct maildir_transaction_context *)ctx->ctx.transaction;
+	ctx->ctx.transaction = NULL; /* transaction is already freed */
 
 	if (ctx->locked)
 		maildir_uidlist_unlock(ctx->mbox->uidlist);
-
-	*t->ictx.saved_uid_validity =
-		maildir_uidlist_get_uid_validity(ctx->mbox->uidlist);
 
 	if (ctx->mail != NULL)
 		mail_free(&ctx->mail);


More information about the dovecot-cvs mailing list