dovecot-1.1: If uidlist writing fails, don't assert-crash.

dovecot at dovecot.org dovecot at dovecot.org
Fri Mar 7 07:38:47 EET 2008


details:   http://hg.dovecot.org/dovecot-1.1/rev/fc296dfcfd29
changeset: 7369:fc296dfcfd29
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Mar 07 07:38:23 2008 +0200
description:
If uidlist writing fails, don't assert-crash.

diffstat:

1 file changed, 10 insertions(+), 5 deletions(-)
src/plugins/fts-squat/squat-uidlist.c |   15 ++++++++++-----

diffs (34 lines):

diff -r 750ff2eb83a0 -r fc296dfcfd29 src/plugins/fts-squat/squat-uidlist.c
--- a/src/plugins/fts-squat/squat-uidlist.c	Fri Mar 07 05:17:56 2008 +0200
+++ b/src/plugins/fts-squat/squat-uidlist.c	Fri Mar 07 07:38:23 2008 +0200
@@ -254,9 +254,11 @@ uidlist_write(struct ostream *output, co
 				*size_r = (bufp - buf) << 2 | packed_flags;
 				return 0;
 			}
+		} else if (unlikely(output->offset <= uid_list[0])) {
+			i_assert(output->closed);
+			return -1;
 		} else {
 			i_assert(list->uid_count > 1);
-			i_assert(output->offset > uid_list[0]);
 			offset = (output->offset - uid_list[0]) << 1;
 		}
 		uid_list++;
@@ -800,10 +802,13 @@ int squat_uidlist_build_finish(struct sq
 	if (ctx->uidlist->corrupted)
 		return -1;
 
-	o_stream_seek(ctx->output, 0);
-	o_stream_send(ctx->output, &ctx->build_hdr, sizeof(ctx->build_hdr));
-	o_stream_seek(ctx->output, ctx->build_hdr.used_file_size);
-	o_stream_flush(ctx->output);
+	if (!ctx->output->closed) {
+		o_stream_seek(ctx->output, 0);
+		o_stream_send(ctx->output,
+			      &ctx->build_hdr, sizeof(ctx->build_hdr));
+		o_stream_seek(ctx->output, ctx->build_hdr.used_file_size);
+		o_stream_flush(ctx->output);
+	}
 
 	if (ctx->output->last_failed_errno != 0) {
 		errno = ctx->output->last_failed_errno;


More information about the dovecot-cvs mailing list