diff --git a/src/lib-sieve/sieve-actions.c b/src/lib-sieve/sieve-actions.c index e1fed35c29e8ba181d98874189fd065edca57710..0f4f65875b26502061cdb9e0bb1d934c378dfc16 100644 --- a/src/lib-sieve/sieve-actions.c +++ b/src/lib-sieve/sieve-actions.c @@ -37,29 +37,6 @@ const struct sieve_operand_class sieve_side_effect_operand_class = { "SIDE-EFFECT" }; -bool sieve_opr_side_effect_read -(const struct sieve_runtime_env *renv, sieve_size_t *address, - struct sieve_side_effect *seffect) -{ - const struct sieve_side_effect_def *sdef; - - seffect->context = NULL; - - if ( !sieve_opr_object_read - (renv, &sieve_side_effect_operand_class, address, &seffect->object) ) - return FALSE; - - sdef = seffect->def = - (const struct sieve_side_effect_def *) seffect->object.def; - - if ( sdef->read_context != NULL && - !sdef->read_context(seffect, renv, address, &seffect->context) ) { - return FALSE; - } - - return TRUE; -} - bool sieve_opr_side_effect_dump (const struct sieve_dumptime_env *denv, sieve_size_t *address) { @@ -84,6 +61,30 @@ bool sieve_opr_side_effect_dump return TRUE; } +int sieve_opr_side_effect_read +(const struct sieve_runtime_env *renv, sieve_size_t *address, + struct sieve_side_effect *seffect) +{ + const struct sieve_side_effect_def *sdef; + int ret; + + seffect->context = NULL; + + if ( !sieve_opr_object_read + (renv, &sieve_side_effect_operand_class, address, &seffect->object) ) + return SIEVE_EXEC_BIN_CORRUPT; + + sdef = seffect->def = + (const struct sieve_side_effect_def *) seffect->object.def; + + if ( sdef->read_context != NULL && (ret=sdef->read_context + (seffect, renv, address, &seffect->context)) <= 0 ) { + return ret; + } + + return SIEVE_EXEC_OK; +} + /* * Optional operands */ diff --git a/src/lib-sieve/sieve-actions.h b/src/lib-sieve/sieve-actions.h index 37d952290c246285ee8b7d27da9e2fdfade75d60..99ae31badb849725b7d62bf18944ecaee2076a88 100644 --- a/src/lib-sieve/sieve-actions.h +++ b/src/lib-sieve/sieve-actions.h @@ -187,12 +187,11 @@ static inline void sieve_opr_side_effect_emit sieve_opr_object_emit(sblock, ext, &seff->obj_def); } -bool sieve_opr_side_effect_read - (const struct sieve_runtime_env *renv, sieve_size_t *address, - struct sieve_side_effect *seffect); - bool sieve_opr_side_effect_dump (const struct sieve_dumptime_env *denv, sieve_size_t *address); +int sieve_opr_side_effect_read + (const struct sieve_runtime_env *renv, sieve_size_t *address, + struct sieve_side_effect *seffect); /* * Optional operands diff --git a/src/lib-sieve/sieve-message.c b/src/lib-sieve/sieve-message.c index 5a0e485b048f1a5f9dd900d25a1b85feb6fe24cc..20bd783e2b84447458dafd3a92e8d12d01349403 100644 --- a/src/lib-sieve/sieve-message.c +++ b/src/lib-sieve/sieve-message.c @@ -604,27 +604,27 @@ bool sieve_opr_message_override_dump return TRUE; } -bool sieve_opr_message_override_read +int sieve_opr_message_override_read (const struct sieve_runtime_env *renv, sieve_size_t *address, struct sieve_message_override *svmo) { const struct sieve_message_override_def *hodef; + int ret; svmo->context = NULL; if ( !sieve_opr_object_read (renv, &sieve_message_override_operand_class, address, &svmo->object) ) - return FALSE; + return SIEVE_EXEC_BIN_CORRUPT; hodef = svmo->def = (const struct sieve_message_override_def *) svmo->object.def; if ( hodef->read_context != NULL && - !hodef->read_context(svmo, renv, address, &svmo->context) ) { - return FALSE; - } + (ret=hodef->read_context(svmo, renv, address, &svmo->context)) <= 0 ) + return ret; - return TRUE; + return SIEVE_EXEC_OK; } /* diff --git a/src/lib-sieve/sieve-message.h b/src/lib-sieve/sieve-message.h index f6d16428fce140f7365cacc37dae88909c2140b3..4b23a2761dd870828968027b2bc7b8209576d7cc 100644 --- a/src/lib-sieve/sieve-message.h +++ b/src/lib-sieve/sieve-message.h @@ -135,12 +135,11 @@ static inline void sieve_opr_message_override_emit sieve_opr_object_emit(sblock, ext, &seff->obj_def); } -bool sieve_opr_message_override_read - (const struct sieve_runtime_env *renv, sieve_size_t *address, - struct sieve_message_override *svmo); - bool sieve_opr_message_override_dump (const struct sieve_dumptime_env *denv, sieve_size_t *address); +int sieve_opr_message_override_read + (const struct sieve_runtime_env *renv, sieve_size_t *address, + struct sieve_message_override *svmo); /* * Optional operands