From: Timo Sirainen Date: Sat, 25 Apr 2026 20:04:40 +0000 (+0000) Subject: mail-compress: Fix panic when save method unavailable X-Git-Tag: 2.4.4~42 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=09ea452a33d6ec37148b79f685e135fe6dec89cd;p=thirdparty%2Fdovecot%2Fcore.git mail-compress: Fix panic when save method unavailable When mail_compress_write_method points to a compression handler that's unknown or not compiled in, user creation correctly fails by setting user->error. The bug: vlast and v->deinit were chained before MODULE_CONTEXT_SET, so the early return left a deinit hook in place without the corresponding module context. Cleanup later panicked with: Panic: Module context mail_compress_user_module missing Defer the vlast/deinit install until after MODULE_CONTEXT_SET so the hook only fires for users that actually have the context attached. --- diff --git a/src/plugins/mail-compress/mail-compress-plugin.c b/src/plugins/mail-compress/mail-compress-plugin.c index 1adbed5ae6..c0d9ea65b3 100644 --- a/src/plugins/mail-compress/mail-compress-plugin.c +++ b/src/plugins/mail-compress/mail-compress-plugin.c @@ -370,9 +370,6 @@ static void mail_compress_mail_user_created(struct mail_user *user) int ret; zuser = p_new(user->pool, struct mail_compress_user, 1); - zuser->module_ctx.super = *v; - user->vlast = &zuser->module_ctx.super; - v->deinit = mail_compress_mail_user_deinit; if (settings_get(user->event, &mail_compress_setting_parser_info, 0, &set, &error) < 0) { @@ -394,6 +391,9 @@ static void mail_compress_mail_user_created(struct mail_user *user) } settings_free(set); + zuser->module_ctx.super = *v; + user->vlast = &zuser->module_ctx.super; + v->deinit = mail_compress_mail_user_deinit; MODULE_CONTEXT_SET(user, mail_compress_user_module, zuser); }