From 4b5ced2c06a652c784cbcf05a34d391fbc396d1f Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Fri, 4 Dec 2020 03:17:17 +0100
Subject: [PATCH] plugins: imap-filter-sieve: Restructure
 imap_sieve_filter_run_scripts().

---
 .../imap-filter-sieve/imap-filter-sieve.c     | 55 +++++++++----------
 1 file changed, 26 insertions(+), 29 deletions(-)

diff --git a/src/plugins/imap-filter-sieve/imap-filter-sieve.c b/src/plugins/imap-filter-sieve/imap-filter-sieve.c
index 03372d538..f3e33017f 100644
--- a/src/plugins/imap-filter-sieve/imap-filter-sieve.c
+++ b/src/plugins/imap-filter-sieve/imap-filter-sieve.c
@@ -775,6 +775,7 @@ imap_sieve_filter_run_scripts(struct imap_filter_sieve_context *sctx,
 	for (i = 0; i < count && more; i++) {
 		struct sieve_script *script = scripts[i].script;
 		struct sieve_binary *sbin = scripts[i].binary;
+		int mstatus;
 
 		if (sbin == NULL) {
 			e_debug(sieve_get_event(svinst),
@@ -804,38 +805,34 @@ imap_sieve_filter_run_scripts(struct imap_filter_sieve_context *sctx,
 		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_filter_open_script(sctx,
-						script, cpflags, user_ehandler,
-						FALSE, &compile_error);
-				if (sbin == NULL) {
-					scripts[i].compile_error =
-						compile_error;
-					break;
-				}
+		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_filter_open_script(
+					sctx, script, cpflags, user_ehandler,
+					FALSE, &compile_error);
+			if (sbin == NULL) {
+				scripts[i].compile_error = compile_error;
+				break;
+			}
 
-				/* Execute again */
-				more = sieve_multiscript_run(mscript, sbin,
-					ehandler, ehandler, exflags);
+			/* Execute again */
+			more = sieve_multiscript_run(mscript, sbin,
+						     ehandler, ehandler,
+						     exflags);
 
-				/* Save new version */
+			/* 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 (mstatus == SIEVE_EXEC_BIN_CORRUPT)
+				scripts[i].binary_corrupt = TRUE;
+			else if (more)
+				(void)sieve_save(sbin, FALSE, NULL);
 		}
 	}
 
-- 
GitLab