Mercurial > dovecot > core-2.2
changeset 22085:4d0e41451da1
lib-storage: Fix mail_storage_set_critical() when input parameter is an old internal error
This could have caused garbage in the error string.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Wed, 24 May 2017 21:29:49 +0300 |
parents | 540b5d44c561 |
children | 4755135cb895 |
files | src/lib-storage/mail-storage.c |
diffstat | 1 files changed, 5 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/mail-storage.c Wed May 24 19:16:03 2017 +0300 +++ b/src/lib-storage/mail-storage.c Wed May 24 21:29:49 2017 +0300 @@ -518,15 +518,19 @@ void mail_storage_set_critical(struct mail_storage *storage, const char *fmt, ...) { + char *old_error = storage->last_internal_error; va_list va; - i_free(storage->last_internal_error); va_start(va, fmt); storage->last_internal_error = i_strdup_vprintf(fmt, va); va_end(va); storage->last_error_is_internal = TRUE; i_error("%s", storage->last_internal_error); + /* free the old_error only after the new error is generated, because + the old_error may be one of the parameters. */ + i_free(old_error); + /* critical errors may contain sensitive data, so let user see only "Internal error" with a timestamp to make it easier to look from log files the actual error message. */