Skip to content

Commit

Permalink
lib-storage: Fix mail_storage_set_critical() when input parameter is …
Browse files Browse the repository at this point in the history
…an old internal error

This could have caused garbage in the error string.
  • Loading branch information
sirainen committed May 24, 2017
1 parent 30d50c7 commit 7e9e616
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/lib-storage/mail-storage.c
Expand Up @@ -518,15 +518,19 @@ void mail_storage_set_internal_error(struct mail_storage *storage)
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. */
Expand Down

0 comments on commit 7e9e616

Please sign in to comment.