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