From 22391f24f056cb5e19e852c6c4966c0d753c2820 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Mon, 11 Nov 2024 01:10:58 +0100 Subject: [PATCH] managesieve: managesieve-client - Fix crash occurring when sieve_init() fails --- src/managesieve/main.c | 2 +- src/managesieve/managesieve-client.c | 9 ++++++++- src/managesieve/managesieve-client.h | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/managesieve/main.c b/src/managesieve/main.c index 186f107c4..25fe6bc24 100644 --- a/src/managesieve/main.c +++ b/src/managesieve/main.c @@ -178,7 +178,7 @@ client_create_from_input(const struct mail_storage_service_input *input, verbose_proctitle = TRUE; if (client_create(fd_in, fd_out, input->session_id, - event, mail_user, set, &client) < 0) { + event, mail_user, set, &client, error_r) < 0) { settings_free(set); mail_user_unref(&mail_user); event_unref(&event); diff --git a/src/managesieve/managesieve-client.c b/src/managesieve/managesieve-client.c index 598941334..2c07afea6 100644 --- a/src/managesieve/managesieve-client.c +++ b/src/managesieve/managesieve-client.c @@ -105,7 +105,7 @@ client_get_storage(struct sieve_instance *svinst, struct event *event, int client_create(int fd_in, int fd_out, const char *session_id, struct event *event, struct mail_user *user, const struct managesieve_settings *set, - struct client **client_r) + struct client **client_r, const char **error_r) { struct client *client; struct sieve_environment svenv; @@ -113,6 +113,9 @@ int client_create(int fd_in, int fd_out, const char *session_id, struct sieve_storage *storage; pool_t pool; + *client_r = NULL; + *error_r = NULL; + /* Initialize Sieve */ i_zero(&svenv); @@ -124,6 +127,10 @@ int client_create(int fd_in, int fd_out, const char *session_id, svinst = sieve_init(&svenv, &managesieve_sieve_callbacks, (void *) user, set->mail_debug); + if (svinst == NULL) { + *error_r = "Failed to initialize Sieve interpreter"; + return -1; + } /* Get Sieve storage */ diff --git a/src/managesieve/managesieve-client.h b/src/managesieve/managesieve-client.h index 4dad8b82b..c06ccb50f 100644 --- a/src/managesieve/managesieve-client.h +++ b/src/managesieve/managesieve-client.h @@ -94,7 +94,7 @@ extern unsigned int managesieve_client_count; int client_create(int fd_in, int fd_out, const char *session_id, struct event *event, struct mail_user *user, const struct managesieve_settings *set, - struct client **client_r); + struct client **client_r, const char **error_r); void client_create_finish(struct client *client); void client_destroy(struct client *client, const char *reason); -- GitLab