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