From de8db9c3a87d72b2ffae85471688d62e7a2b73d4 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Fri, 11 Oct 2024 22:54:13 +0200
Subject: [PATCH] lib-sieve: sieve-extensions - Use int for
 sieve_extension_replace() status result

---
 src/lib-sieve/sieve-extensions.c   | 12 ++++--------
 src/lib-sieve/sieve-extensions.h   |  6 +++---
 src/plugins/imapsieve/imap-sieve.c | 11 +++++++----
 3 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/src/lib-sieve/sieve-extensions.c b/src/lib-sieve/sieve-extensions.c
index 7aee135a8..fbe45cf57 100644
--- a/src/lib-sieve/sieve-extensions.c
+++ b/src/lib-sieve/sieve-extensions.c
@@ -485,9 +485,9 @@ int sieve_extension_reload(const struct sieve_extension *ext)
 	return _sieve_extension_load(*mod_ext);
 }
 
-const struct sieve_extension *
-sieve_extension_replace(struct sieve_instance *svinst,
-			const struct sieve_extension_def *extdef, bool load)
+int sieve_extension_replace(struct sieve_instance *svinst,
+			    const struct sieve_extension_def *extdef, bool load,
+			    const struct sieve_extension **ext_r)
 {
 	struct sieve_extension *ext;
 
@@ -495,11 +495,7 @@ sieve_extension_replace(struct sieve_instance *svinst,
 	if (ext != NULL)
 		sieve_extension_unregister(ext);
 
-	const struct sieve_extension *ext_new;
-
-	if (sieve_extension_register(svinst, extdef, load, &ext_new) < 0)
-		return NULL;
-	return ext_new;
+	return sieve_extension_register(svinst, extdef, load, ext_r);
 }
 
 void sieve_extension_override(struct sieve_instance *svinst, const char *name,
diff --git a/src/lib-sieve/sieve-extensions.h b/src/lib-sieve/sieve-extensions.h
index c63d3f87e..21cdb473b 100644
--- a/src/lib-sieve/sieve-extensions.h
+++ b/src/lib-sieve/sieve-extensions.h
@@ -137,9 +137,9 @@ int sieve_extension_reload(const struct sieve_extension *ext);
 
 void sieve_extension_unregister(const struct sieve_extension *ext);
 
-const struct sieve_extension *
-sieve_extension_replace(struct sieve_instance *svinst,
-			const struct sieve_extension_def *extdef, bool load);
+int sieve_extension_replace(struct sieve_instance *svinst,
+			    const struct sieve_extension_def *extdef, bool load,
+			    const struct sieve_extension **ext_r);
 void sieve_extension_override(struct sieve_instance *svinst, const char *name,
 			      const struct sieve_extension *ext);
 
diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c
index 54631d701..8bb20c33c 100644
--- a/src/plugins/imapsieve/imap-sieve.c
+++ b/src/plugins/imapsieve/imap-sieve.c
@@ -92,10 +92,13 @@ struct imap_sieve *imap_sieve_init(struct client *client)
 		       debug, &isieve->svinst) < 0)
 		return isieve;
 
-	isieve->ext_imapsieve = sieve_extension_replace(
-		isieve->svinst, &imapsieve_extension, TRUE);
-	isieve->ext_vnd_imapsieve = sieve_extension_replace(
-		isieve->svinst, &vnd_imapsieve_extension, TRUE);
+	if (sieve_extension_replace(isieve->svinst, &imapsieve_extension,
+				    TRUE, &isieve->ext_imapsieve) < 0 ||
+	    sieve_extension_replace(isieve->svinst, &vnd_imapsieve_extension,
+				    TRUE, &isieve->ext_vnd_imapsieve) < 0) {
+		sieve_deinit(&isieve->svinst);
+		return isieve;
+	}
 
 	isieve->master_ehandler =
 		sieve_master_ehandler_create(isieve->svinst, 0);
-- 
GitLab