dovecot-1.2: mbox: Fixed a crash when adding a new X-IMAPbase: h...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Jun 21 16:40:51 EEST 2008
details: http://hg.dovecot.org/dovecot-1.2/rev/5dcc04b62e14
changeset: 7934:5dcc04b62e14
user: Timo Sirainen <tss at iki.fi>
date: Fri Jun 20 11:07:21 2008 +0300
description:
mbox: Fixed a crash when adding a new X-IMAPbase: header with keywords.
diffstat:
1 file changed, 10 insertions(+), 6 deletions(-)
src/lib-storage/index/mbox/mbox-sync-update.c | 16 ++++++++++------
diffs (61 lines):
diff -r 96b8f50c9eea -r 5dcc04b62e14 src/lib-storage/index/mbox/mbox-sync-update.c
--- a/src/lib-storage/index/mbox/mbox-sync-update.c Thu Jun 19 01:41:42 2008 +0300
+++ b/src/lib-storage/index/mbox/mbox-sync-update.c Fri Jun 20 11:07:21 2008 +0300
@@ -149,7 +149,8 @@ keywords_append(struct mbox_sync_context
}
static void
-keywords_append_all(struct mbox_sync_mail_context *ctx, string_t *dest)
+keywords_append_all(struct mbox_sync_mail_context *ctx, string_t *dest,
+ size_t startpos)
{
const char *const *names;
const unsigned char *p;
@@ -157,8 +158,8 @@ keywords_append_all(struct mbox_sync_mai
size_t last_break;
p = str_data(dest);
- if (str_len(dest) < KEYWORD_WRAP_LINE_LENGTH)
- last_break = 0;
+ if (str_len(dest) - startpos < KEYWORD_WRAP_LINE_LENGTH)
+ last_break = startpos;
else {
/* set last_break to beginning of line */
for (last_break = str_len(dest); last_break > 0; last_break--) {
@@ -182,7 +183,7 @@ keywords_append_all(struct mbox_sync_mai
static void mbox_sync_add_missing_headers(struct mbox_sync_mail_context *ctx)
{
- size_t old_hdr_size, new_hdr_size;
+ size_t old_hdr_size, new_hdr_size, startpos;
old_hdr_size = ctx->body_offset - ctx->hdr_offset;
new_hdr_size = str_len(ctx->header);
@@ -199,6 +200,9 @@ static void mbox_sync_add_missing_header
str_append(ctx->header, "X-IMAPbase: ");
ctx->hdr_pos[MBOX_HDR_X_IMAPBASE] = str_len(ctx->header);
+ /* startpos must start from identical position as when
+ updating */
+ startpos = str_len(ctx->header);
str_printfa(ctx->header, "%u ",
ctx->sync_ctx->base_uid_validity);
@@ -208,7 +212,7 @@ static void mbox_sync_add_missing_header
ctx->imapbase_updated = TRUE;
str_printfa(ctx->header, "%010u", ctx->last_uid_updated_value);
- keywords_append_all(ctx, ctx->header);
+ keywords_append_all(ctx, ctx->header, startpos);
str_append_c(ctx->header, '\n');
}
@@ -355,7 +359,7 @@ static void mbox_sync_update_x_imap_base
ctx->imapbase_updated = TRUE;
str_printfa(str, "%010u", ctx->last_uid_updated_value);
- keywords_append_all(ctx, str);
+ keywords_append_all(ctx, str, 0);
str_append_c(str, '\n');
mbox_sync_update_line(ctx, ctx->hdr_pos[MBOX_HDR_X_IMAPBASE], str);
More information about the dovecot-cvs
mailing list