From: Timo Sirainen Date: Fri, 23 Oct 2020 11:54:22 +0000 (+0300) Subject: lib-fs: iteration - Fix crash when overwriting iteration error X-Git-Tag: 2.3.13~65 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=005a3d3b52cf0a560d2b0058610566c70d33fb1d;p=thirdparty%2Fdovecot%2Fcore.git lib-fs: iteration - Fix crash when overwriting iteration error Can't use fs_file_path() because file is NULL. Instead, add the path to struct fs_iter directly so it can be used in the error. Broken by eaaf40ca4e8994824abff89fc617c3cc737d83a5 --- diff --git a/src/lib-fs/fs-api-private.h b/src/lib-fs/fs-api-private.h index 7d4c0b5e90..9231349f67 100644 --- a/src/lib-fs/fs-api-private.h +++ b/src/lib-fs/fs-api-private.h @@ -155,6 +155,7 @@ struct fs_iter { struct fs *fs; struct event *event; + char *path; enum fs_iter_flags flags; struct timeval start_time; char *last_error; diff --git a/src/lib-fs/fs-api.c b/src/lib-fs/fs-api.c index 12bce8a686..44ce7e625f 100644 --- a/src/lib-fs/fs-api.c +++ b/src/lib-fs/fs-api.c @@ -635,7 +635,7 @@ fs_set_verror(struct event *event, const char *fmt, va_list args) /* multiple fs_set_error() calls before the iter finishes */ e_error(iter->fs->event, "%s (overwriting error for file %s)", - iter->last_error, fs_file_path(file)); + iter->last_error, iter->path); } i_free(iter->last_error); iter->last_error = new_error; @@ -1246,6 +1246,7 @@ fs_iter_init_with_event(struct fs *fs, struct event *event, iter = fs->v.iter_alloc(); iter->fs = fs; iter->flags = flags; + iter->path = i_strdup(path); iter->event = fs_create_event(fs, event); event_set_ptr(iter->event, FS_EVENT_FIELD_FS, fs); event_set_ptr(iter->event, FS_EVENT_FIELD_ITER, iter); @@ -1281,6 +1282,7 @@ int fs_iter_deinit(struct fs_iter **_iter, const char **error_r) if (ret < 0) *error_r = t_strdup(iter->last_error); i_free(iter->last_error); + i_free(iter->path); i_free(iter); event_unref(&event); return ret;