From 9a41860b7c2fa635e54675df93caddf450e19915 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Fri, 11 Oct 2024 23:08:19 +0200 Subject: [PATCH] lib-sieve: sieve - Make sieve instance initialization fail if extension fails to load --- src/lib-sieve/sieve-extensions.c | 18 +++++++++++------- src/lib-sieve/sieve-extensions.h | 2 +- src/lib-sieve/sieve.c | 5 ++++- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/lib-sieve/sieve-extensions.c b/src/lib-sieve/sieve-extensions.c index 4127d4c24..a6400c438 100644 --- a/src/lib-sieve/sieve-extensions.c +++ b/src/lib-sieve/sieve-extensions.c @@ -253,30 +253,34 @@ int sieve_extensions_init(struct sieve_instance *svinst) return 0; } -void sieve_extensions_load(struct sieve_instance *svinst) +int sieve_extensions_load(struct sieve_instance *svinst) { const char *extensions; /* Apply sieve_extensions configuration */ if ((extensions = sieve_setting_get( svinst, "sieve_extensions")) != NULL) { - (void)sieve_extensions_set_string(svinst, extensions, - FALSE, FALSE); + if (sieve_extensions_set_string(svinst, extensions, + FALSE, FALSE) < 0) + return -1; } /* Apply sieve_global_extensions configuration */ if ((extensions = sieve_setting_get( svinst, "sieve_global_extensions")) != NULL) { - (void)sieve_extensions_set_string(svinst, extensions, - TRUE, FALSE); + if (sieve_extensions_set_string(svinst, extensions, + TRUE, FALSE) < 0) + return -1; } /* Apply sieve_implicit_extensions configuration */ if ((extensions = sieve_setting_get( svinst, "sieve_implicit_extensions")) != NULL) { - (void)sieve_extensions_set_string(svinst, extensions, - FALSE, TRUE); + if (sieve_extensions_set_string(svinst, extensions, + FALSE, TRUE) < 0) + return -1; } + return 0; } void sieve_extensions_deinit(struct sieve_instance *svinst) diff --git a/src/lib-sieve/sieve-extensions.h b/src/lib-sieve/sieve-extensions.h index ae819e78c..5bbfdbf67 100644 --- a/src/lib-sieve/sieve-extensions.h +++ b/src/lib-sieve/sieve-extensions.h @@ -112,7 +112,7 @@ struct sieve_extension { */ int sieve_extensions_init(struct sieve_instance *svinst); -void sieve_extensions_load(struct sieve_instance *svinst); +int sieve_extensions_load(struct sieve_instance *svinst); void sieve_extensions_deinit(struct sieve_instance *svinst); /* diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c index 462f47d32..757e82f74 100644 --- a/src/lib-sieve/sieve.c +++ b/src/lib-sieve/sieve.c @@ -138,7 +138,10 @@ int sieve_init(const struct sieve_environment *env, sieve_plugins_load(svinst, NULL, NULL); /* Load extensions */ - sieve_extensions_load(svinst); + if (sieve_extensions_load(svinst) < 0) { + sieve_deinit(&svinst); + return -1; + } *svinst_r = svinst; return 0; -- GitLab