diff --git a/src/lib-sieve/sieve-extensions.c b/src/lib-sieve/sieve-extensions.c index 7aee135a8ef19b6e5e36190aef9c7aa0d9be9541..fbe45cf57bbfe34924d364ab3e467dd430d06d58 100644 --- a/src/lib-sieve/sieve-extensions.c +++ b/src/lib-sieve/sieve-extensions.c @@ -485,9 +485,9 @@ int sieve_extension_reload(const struct sieve_extension *ext) return _sieve_extension_load(*mod_ext); } -const struct sieve_extension * -sieve_extension_replace(struct sieve_instance *svinst, - const struct sieve_extension_def *extdef, bool load) +int sieve_extension_replace(struct sieve_instance *svinst, + const struct sieve_extension_def *extdef, bool load, + const struct sieve_extension **ext_r) { struct sieve_extension *ext; @@ -495,11 +495,7 @@ sieve_extension_replace(struct sieve_instance *svinst, if (ext != NULL) sieve_extension_unregister(ext); - const struct sieve_extension *ext_new; - - if (sieve_extension_register(svinst, extdef, load, &ext_new) < 0) - return NULL; - return ext_new; + return sieve_extension_register(svinst, extdef, load, ext_r); } void sieve_extension_override(struct sieve_instance *svinst, const char *name, diff --git a/src/lib-sieve/sieve-extensions.h b/src/lib-sieve/sieve-extensions.h index c63d3f87eb354b0070fd38195616b2f59f73d5e1..21cdb473bb4bf0c8113d76d5ef68d04acdfec3d3 100644 --- a/src/lib-sieve/sieve-extensions.h +++ b/src/lib-sieve/sieve-extensions.h @@ -137,9 +137,9 @@ int sieve_extension_reload(const struct sieve_extension *ext); void sieve_extension_unregister(const struct sieve_extension *ext); -const struct sieve_extension * -sieve_extension_replace(struct sieve_instance *svinst, - const struct sieve_extension_def *extdef, bool load); +int sieve_extension_replace(struct sieve_instance *svinst, + const struct sieve_extension_def *extdef, bool load, + const struct sieve_extension **ext_r); void sieve_extension_override(struct sieve_instance *svinst, const char *name, const struct sieve_extension *ext); diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c index 54631d7012d4c680a0e9113775e26e48f74f5e70..8bb20c33cafe120cda24e601f7f4272e5c5b50e3 100644 --- a/src/plugins/imapsieve/imap-sieve.c +++ b/src/plugins/imapsieve/imap-sieve.c @@ -92,10 +92,13 @@ struct imap_sieve *imap_sieve_init(struct client *client) debug, &isieve->svinst) < 0) return isieve; - isieve->ext_imapsieve = sieve_extension_replace( - isieve->svinst, &imapsieve_extension, TRUE); - isieve->ext_vnd_imapsieve = sieve_extension_replace( - isieve->svinst, &vnd_imapsieve_extension, TRUE); + if (sieve_extension_replace(isieve->svinst, &imapsieve_extension, + TRUE, &isieve->ext_imapsieve) < 0 || + sieve_extension_replace(isieve->svinst, &vnd_imapsieve_extension, + TRUE, &isieve->ext_vnd_imapsieve) < 0) { + sieve_deinit(&isieve->svinst); + return isieve; + } isieve->master_ehandler = sieve_master_ehandler_create(isieve->svinst, 0);