From f043569d081c185fb70a30b7c1761cff39baf501 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Fri, 4 Dec 2020 02:54:58 +0100 Subject: [PATCH] plugins: imapsieve: Restructure imap_sieve_run_scripts(). --- src/plugins/imapsieve/imap-sieve.c | 58 +++++++++++++++--------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c index 89156b923..74d66eb7b 100644 --- a/src/plugins/imapsieve/imap-sieve.c +++ b/src/plugins/imapsieve/imap-sieve.c @@ -679,6 +679,7 @@ imap_sieve_run_scripts(struct imap_sieve_run *isrun, for (i = 0; i < count && more; i++) { struct sieve_script *script = scripts[i].script; struct sieve_binary *sbin = scripts[i].binary; + int mstatus; cpflags = 0; exflags = SIEVE_EXECUTE_FLAG_NO_ENVELOPE | @@ -724,37 +725,34 @@ imap_sieve_run_scripts(struct imap_sieve_run *isrun, more = sieve_multiscript_run(mscript, sbin, ehandler, ehandler, exflags); - if (!more) { - if (!scripts[i].binary_corrupt && - sieve_multiscript_status(mscript) - == SIEVE_EXEC_BIN_CORRUPT && - sieve_is_loaded(sbin)) { - /* Close corrupt script */ - sieve_close(&sbin); - - /* Recompile */ - scripts[i].binary = sbin = - imap_sieve_run_open_script( - isrun, script, cpflags, FALSE, - &compile_error); - if (sbin == NULL) { - scripts[i].compile_error = compile_error; - break; - } - - /* Execute again */ - more = sieve_multiscript_run(mscript, sbin, - ehandler, ehandler, - exflags); - - /* Save new version */ - - if (sieve_multiscript_status(mscript) - == SIEVE_EXEC_BIN_CORRUPT) - scripts[i].binary_corrupt = TRUE; - else if (more) - (void)sieve_save(sbin, FALSE, NULL); + mstatus = sieve_multiscript_status(mscript); + if (!more && mstatus == SIEVE_EXEC_BIN_CORRUPT && + !scripts[i].binary_corrupt && sieve_is_loaded(sbin)) { + /* Close corrupt script */ + sieve_close(&sbin); + + /* Recompile */ + scripts[i].binary = sbin = + imap_sieve_run_open_script( + isrun, script, cpflags, FALSE, + &compile_error); + if (sbin == NULL) { + scripts[i].compile_error = compile_error; + break; } + + /* Execute again */ + more = sieve_multiscript_run(mscript, sbin, + ehandler, ehandler, + exflags); + + /* Save new version */ + + mstatus = sieve_multiscript_status(mscript); + if (mstatus == SIEVE_EXEC_BIN_CORRUPT) + scripts[i].binary_corrupt = TRUE; + else if (more) + (void)sieve_save(sbin, FALSE, NULL); } } -- GitLab