Mercurial > dovecot > original-hg > dovecot-1.2
changeset 7170:36092ec27396 HEAD
Extensions weren't copied in memory correctly, possibly causing garbage to
be written to uidlist file.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 19 Jan 2008 09:08:22 +0200 |
parents | b9d78196e9ba |
children | 2e60288f0d75 |
files | src/lib-storage/index/maildir/maildir-uidlist.c |
diffstat | 1 files changed, 22 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-uidlist.c Sat Jan 19 08:50:56 2008 +0200 +++ b/src/lib-storage/index/maildir/maildir-uidlist.c Sat Jan 19 09:08:22 2008 +0200 @@ -1210,6 +1210,27 @@ ctx->finished = FALSE; } +static char *ext_dup(pool_t pool, const char *extensions) +{ + char *ret; + + if (extensions == NULL) + return NULL; + + T_FRAME_BEGIN { + string_t *str = t_str_new(64); + unsigned int len; + + while (*extensions != '\0') { + len = strlen(extensions); + str_append_n(str, extensions, len); + extensions += len + 1; + } + ret = p_strdup(pool, str_c(str)); + } T_FRAME_END; + return ret; +} + int maildir_uidlist_sync_next(struct maildir_uidlist_sync_ctx *ctx, const char *filename, enum maildir_uidlist_rec_flag flags) @@ -1247,7 +1268,7 @@ if (old_rec != NULL) { *rec = *old_rec; rec->extensions = - p_strdup(ctx->record_pool, rec->extensions); + ext_dup(ctx->record_pool, rec->extensions); } else { rec->uid = (uint32_t)-1; ctx->new_files_count++;