diff --git a/src/lib-sieve/plugins/environment/sieve-ext-environment.h b/src/lib-sieve/plugins/environment/sieve-ext-environment.h index 7ae76db3d6c89a83db8dd0df47fa3bc0fd22a10a..34b5e2edd2110a0de1c2fe10c03adfaadf6d405c 100644 --- a/src/lib-sieve/plugins/environment/sieve-ext-environment.h +++ b/src/lib-sieve/plugins/environment/sieve-ext-environment.h @@ -25,7 +25,12 @@ sieve_ext_environment_get_extension(struct sieve_instance *svinst) static inline const struct sieve_extension * sieve_ext_environment_require_extension(struct sieve_instance *svinst) { - return sieve_extension_require(svinst, &environment_extension, TRUE); + const struct sieve_extension *ext; + + if (sieve_extension_require(svinst, &environment_extension, TRUE, + &ext) < 0) + return NULL; + return ext; } bool sieve_ext_environment_is_active(const struct sieve_extension *env_ext, diff --git a/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h b/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h index 7c3078a73a4895bc883add6a17f28598a6c6cb90..fdac9bac56105055f3d9d9d8b900af1cded57717 100644 --- a/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h +++ b/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h @@ -16,7 +16,12 @@ extern const struct sieve_interpreter_extension static inline const struct sieve_extension * sieve_ext_imap4flags_require_extension(struct sieve_instance *svinst) { - return sieve_extension_require(svinst, &imap4flags_extension, TRUE); + const struct sieve_extension *ext; + + if (sieve_extension_require(svinst, &imap4flags_extension, TRUE, + &ext) < 0) + return NULL; + return ext; } void sieve_ext_imap4flags_interpreter_load( diff --git a/src/lib-sieve/plugins/vacation/ext-vacation-seconds.c b/src/lib-sieve/plugins/vacation/ext-vacation-seconds.c index 7775f3a6ac24971089e3f8176eb7320164537423..1d52fc44f0b3f63512625b587e22db799ab0e75d 100644 --- a/src/lib-sieve/plugins/vacation/ext-vacation-seconds.c +++ b/src/lib-sieve/plugins/vacation/ext-vacation-seconds.c @@ -46,6 +46,7 @@ const struct sieve_extension_def vacation_seconds_extension = { static bool ext_vacation_seconds_load(const struct sieve_extension *ext, void **context) { + const struct sieve_extension *ext_vac; struct ext_vacation_seconds_context *extctx; if (*context != NULL) { @@ -53,11 +54,13 @@ ext_vacation_seconds_load(const struct sieve_extension *ext, void **context) *context = NULL; } - extctx = i_new(struct ext_vacation_seconds_context, 1); - /* Make sure vacation extension is registered */ - extctx->ext_vacation = sieve_extension_require( - ext->svinst, &vacation_extension, TRUE); + if (sieve_extension_require(ext->svinst, &vacation_extension, + TRUE, &ext_vac) < 0) + return FALSE; + + extctx = i_new(struct ext_vacation_seconds_context, 1); + extctx->ext_vacation = ext_vac; *context = extctx; return TRUE; diff --git a/src/lib-sieve/sieve-extensions.c b/src/lib-sieve/sieve-extensions.c index c1d553b09375a6f824f43a2798a7f2fcb7c4f856..58518f4f9238399ccdd16caa5a811387fcad6422 100644 --- a/src/lib-sieve/sieve-extensions.c +++ b/src/lib-sieve/sieve-extensions.c @@ -463,16 +463,12 @@ void sieve_extension_unregister(const struct sieve_extension *ext) } } -const struct sieve_extension * -sieve_extension_require(struct sieve_instance *svinst, - const struct sieve_extension_def *extdef, bool load) +int sieve_extension_require(struct sieve_instance *svinst, + const struct sieve_extension_def *extdef, bool load, + const struct sieve_extension **ext_r) { - const struct sieve_extension *ext; - - if (_sieve_extension_register_const(svinst, extdef, load, TRUE, - &ext) < 0) - return NULL; - return ext; + return _sieve_extension_register_const(svinst, extdef, load, TRUE, + ext_r); } bool sieve_extension_reload(const struct sieve_extension *ext) diff --git a/src/lib-sieve/sieve-extensions.h b/src/lib-sieve/sieve-extensions.h index 3d655ea76d38e11743135fbab9b800c3f25fd9cd..7546b63523a22d4089f51d5271633fa760e2c557 100644 --- a/src/lib-sieve/sieve-extensions.h +++ b/src/lib-sieve/sieve-extensions.h @@ -130,9 +130,9 @@ sieve_extensions_get_preloaded(struct sieve_instance *svinst, int sieve_extension_register(struct sieve_instance *svinst, const struct sieve_extension_def *extdef, bool load, const struct sieve_extension **ext_r); -const struct sieve_extension * -sieve_extension_require(struct sieve_instance *svinst, - const struct sieve_extension_def *extension, bool load); +int sieve_extension_require(struct sieve_instance *svinst, + const struct sieve_extension_def *extdef, bool load, + const struct sieve_extension **ext_r); bool sieve_extension_reload(const struct sieve_extension *ext); void sieve_extension_unregister(const struct sieve_extension *ext); diff --git a/src/plugins/imapsieve/ext-imapsieve.c b/src/plugins/imapsieve/ext-imapsieve.c index ff56b5ef24f1746bdfbd6ffdd24d34370bbf99b7..077e7b77498566ca3bc774b011b11945a344db05 100644 --- a/src/plugins/imapsieve/ext-imapsieve.c +++ b/src/plugins/imapsieve/ext-imapsieve.c @@ -100,11 +100,13 @@ ext_vnd_imapsieve_load(const struct sieve_extension *ext, void **context) extctx = i_new(struct ext_vnd_imapsieve_context, 1); #ifdef __IMAPSIEVE_DUMMY - extctx->ext_imapsieve = sieve_extension_require( - ext->svinst, &imapsieve_extension_dummy, TRUE); + if (sieve_extension_require(ext->svinst, &imapsieve_extension_dummy, + TRUE, &extctx->ext_imapsieve) < 0) + return FALSE; #else - extctx->ext_imapsieve = sieve_extension_require( - ext->svinst, &imapsieve_extension, TRUE); + if (sieve_extension_require(ext->svinst, &imapsieve_extension, + TRUE, &extctx->ext_imapsieve) < 0) + return FALSE; #endif *context = extctx;