dovecot-2.2: dbox: Added asserts to make sure the mail body isn'...

dovecot at dovecot.org dovecot at dovecot.org
Mon Jan 19 19:59:39 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/b03b1369410d
changeset: 18168:b03b1369410d
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Jan 19 21:52:21 2015 +0200
description:
dbox: Added asserts to make sure the mail body isn't tried to be read too early while saving.
If the mail headers are still being written, the opening will just fail
thinking the mail is corrupted.

diffstat:

 src/lib-storage/index/dbox-multi/mdbox-save.c  |  3 +++
 src/lib-storage/index/dbox-single/sdbox-file.h |  1 +
 src/lib-storage/index/dbox-single/sdbox-save.c |  7 +++++--
 3 files changed, 9 insertions(+), 2 deletions(-)

diffs (69 lines):

diff -r 89163656c0f5 -r b03b1369410d src/lib-storage/index/dbox-multi/mdbox-save.c
--- a/src/lib-storage/index/dbox-multi/mdbox-save.c	Mon Jan 19 21:11:29 2015 +0200
+++ b/src/lib-storage/index/dbox-multi/mdbox-save.c	Mon Jan 19 21:52:21 2015 +0200
@@ -24,6 +24,7 @@
 	struct dbox_file_append_context *file_append;
 	uint32_t seq;
 	uint32_t append_offset;
+	bool written_to_disk;
 };
 
 struct mdbox_save_context {
@@ -85,6 +86,7 @@
 	}
 
 	/* saved mail */
+	i_assert(mail->written_to_disk);
 	if (dbox_file_append_flush(mail->file_append) < 0)
 		ctx->ctx.failed = TRUE;
 
@@ -183,6 +185,7 @@
 		dbox_file_set_syscall_error(file, "pwrite()");
 		return -1;
 	}
+	mail->written_to_disk = TRUE;
 	return 0;
 }
 
diff -r 89163656c0f5 -r b03b1369410d src/lib-storage/index/dbox-single/sdbox-file.h
--- a/src/lib-storage/index/dbox-single/sdbox-file.h	Mon Jan 19 21:11:29 2015 +0200
+++ b/src/lib-storage/index/dbox-single/sdbox-file.h	Mon Jan 19 21:52:21 2015 +0200
@@ -13,6 +13,7 @@
 	/* list of attachment paths while saving/copying message */
 	pool_t attachment_pool;
 	ARRAY_TYPE(const_string) attachment_paths;
+	bool written_to_disk;
 };
 
 struct dbox_file *sdbox_file_init(struct sdbox_mailbox *mbox, uint32_t uid);
diff -r 89163656c0f5 -r b03b1369410d src/lib-storage/index/dbox-single/sdbox-save.c
--- a/src/lib-storage/index/dbox-single/sdbox-save.c	Mon Jan 19 21:11:29 2015 +0200
+++ b/src/lib-storage/index/dbox-single/sdbox-save.c	Mon Jan 19 21:52:21 2015 +0200
@@ -38,7 +38,7 @@
 {
 	struct sdbox_save_context *ctx =
 		(struct sdbox_save_context *)t->save_ctx;
-	struct dbox_file *const *files;
+	struct dbox_file *const *files, *file;
 	unsigned int count;
 
 	i_assert(seq >= ctx->first_saved_seq);
@@ -47,7 +47,9 @@
 	i_assert(count > 0);
 	i_assert(seq - ctx->first_saved_seq < count);
 
-	return files[seq - ctx->first_saved_seq];
+	file = files[seq - ctx->first_saved_seq];
+	i_assert(((struct sdbox_file *)file)->written_to_disk);
+	return file;
 }
 
 struct mail_save_context *
@@ -144,6 +146,7 @@
 		dbox_file_set_syscall_error(file, "pwrite()");
 		return -1;
 	}
+	sfile->written_to_disk = TRUE;
 
 	/* remember the attachment paths until commit time */
 	extrefs_arr = index_attachment_save_get_extrefs(&ctx->ctx);


More information about the dovecot-cvs mailing list