From 2292a6d41bb0276fa6f91c6950352255871bc885 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Fri, 21 Oct 2016 01:01:16 +0200 Subject: [PATCH] lib-sieve: code dumper: Fixed T_BEGIN { ... } T_END block violation. --- src/lib-sieve/sieve-code-dumper.c | 73 +++++++++++++++++-------------- 1 file changed, 41 insertions(+), 32 deletions(-) diff --git a/src/lib-sieve/sieve-code-dumper.c b/src/lib-sieve/sieve-code-dumper.c index 3c098b669..32b13daf3 100644 --- a/src/lib-sieve/sieve-code-dumper.c +++ b/src/lib-sieve/sieve-code-dumper.c @@ -232,13 +232,49 @@ static bool sieve_code_dumper_print_operation return FALSE; } +static bool sieve_code_dumper_print_extension +(struct sieve_code_dumper *cdumper) +{ + struct sieve_dumptime_env *denv = cdumper->dumpenv; + sieve_size_t *address = &(denv->offset); + struct sieve_binary_block *sblock = denv->sblock; + unsigned int code = 0, deferred; + const struct sieve_extension *ext; + + sieve_code_mark(denv); + + if ( !sieve_binary_read_extension + (sblock, address, &code, &ext) || + !sieve_binary_read_byte + (sblock, address, &deferred) ) { + return FALSE; + } + + if ( ext->def == NULL) { + sieve_code_dumpf(denv, "[undefined]"); + + } else { + sieve_code_dumpf(denv, "%s%s", + sieve_extension_name(ext), + (deferred > 0 ? " (deferred)" : "")); + + if (ext->def->code_dump != NULL ) { + sieve_code_descend(denv); + if ( !ext->def->code_dump(ext, denv, address) ) + return FALSE; + sieve_code_ascend(denv); + } + } + return TRUE; +} + void sieve_code_dumper_run(struct sieve_code_dumper *cdumper) { struct sieve_dumptime_env *denv = cdumper->dumpenv; struct sieve_binary *sbin = denv->sbin; struct sieve_binary_block *sblock = denv->sblock; unsigned int debug_block_id, ext_count; - bool success = TRUE; + bool success; sieve_size_t *address; denv->offset = 0; @@ -273,44 +309,17 @@ void sieve_code_dumper_run(struct sieve_code_dumper *cdumper) /* Load and dump extensions listed in code */ sieve_code_mark(denv); + success = TRUE; if ( sieve_binary_read_unsigned(sblock, address, &ext_count) ) { unsigned int i; sieve_code_dumpf(denv, "EXTENSIONS [%d]:", ext_count); sieve_code_descend(denv); - for ( i = 0; i < ext_count; i++ ) { - unsigned int code = 0, deferred; - const struct sieve_extension *ext; - + for ( i = 0; success && (i < ext_count); i++ ) { T_BEGIN { - sieve_code_mark(denv); - - if ( !sieve_binary_read_extension - (sblock, address, &code, &ext) || - !sieve_binary_read_byte - (sblock, address, &deferred) ) { - success = FALSE; - break; - } - - if ( ext->def == NULL) { - sieve_code_dumpf(denv, "[undefined]"); - - } else { - sieve_code_dumpf(denv, "%s%s", - sieve_extension_name(ext), - (deferred > 0 ? " (deferred)" : "")); - - if (ext->def->code_dump != NULL ) { - sieve_code_descend(denv); - if ( !ext->def->code_dump(ext, denv, address) ) { - success = FALSE; - break; - } - sieve_code_ascend(denv); - } - } + success = success && + sieve_code_dumper_print_extension(cdumper); } T_END; }