From 56ef5958d0a8513fb6fc5e81641a617866c9f1ac Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Wed, 11 Aug 2010 17:25:48 +0200 Subject: [PATCH] Fixed segfault occuring when loaded binary block turns out to be corrupt. --- src/lib-sieve/sieve-interpreter.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/lib-sieve/sieve-interpreter.c b/src/lib-sieve/sieve-interpreter.c index 4a0e9a116..ec2b85fca 100644 --- a/src/lib-sieve/sieve-interpreter.c +++ b/src/lib-sieve/sieve-interpreter.c @@ -174,6 +174,7 @@ static struct sieve_interpreter *_sieve_interpreter_create if ( !success ) { sieve_interpreter_free(&interp); + interp = NULL; } else { interp->reset_vector = *address; } @@ -185,8 +186,11 @@ struct sieve_interpreter *sieve_interpreter_create (struct sieve_binary *sbin, const struct sieve_message_data *msgdata, const struct sieve_script_env *senv, struct sieve_error_handler *ehandler) { - struct sieve_binary_block *sblock = - sieve_binary_block_get(sbin, SBIN_SYSBLOCK_MAIN_PROGRAM); + struct sieve_binary_block *sblock; + + if ( (sblock=sieve_binary_block_get(sbin, SBIN_SYSBLOCK_MAIN_PROGRAM)) + == NULL ) + return NULL; return _sieve_interpreter_create(sbin, sblock, NULL, msgdata, senv, ehandler); } @@ -196,10 +200,11 @@ struct sieve_interpreter *sieve_interpreter_create_for_block const struct sieve_message_data *msgdata, const struct sieve_script_env *senv, struct sieve_error_handler *ehandler) { - struct sieve_binary *sbin = sieve_binary_block_get_binary(sblock); + if ( sblock == NULL ) return NULL; return _sieve_interpreter_create - (sbin, sblock, script, msgdata, senv, ehandler); + (sieve_binary_block_get_binary(sblock), sblock, script, msgdata, senv, + ehandler); } void sieve_interpreter_free(struct sieve_interpreter **interp) -- GitLab