From b35daf5ed8f1fa6baa2fee56276e3da75487b6a1 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Mon, 19 Aug 2024 07:48:21 +0200
Subject: [PATCH] lib-sieve: sieve - Use int for sieve_init() status result

---
 src/lib-sieve-tool/sieve-tool.c                   |  5 ++---
 src/lib-sieve/sieve.c                             | 13 ++++++++-----
 src/lib-sieve/sieve.h                             |  6 +++---
 src/managesieve/managesieve-capabilities.c        |  5 ++---
 src/managesieve/managesieve-client.c              |  5 ++---
 src/plugins/doveadm-sieve/doveadm-sieve-cmd.c     |  5 ++---
 src/plugins/doveadm-sieve/doveadm-sieve-sync.c    |  5 ++---
 src/plugins/imap-filter-sieve/imap-filter-sieve.c |  5 ++---
 src/plugins/imapsieve/imap-sieve.c                |  5 ++---
 src/plugins/lda-sieve/lda-sieve-plugin.c          |  4 ++--
 10 files changed, 27 insertions(+), 31 deletions(-)

diff --git a/src/lib-sieve-tool/sieve-tool.c b/src/lib-sieve-tool/sieve-tool.c
index 296364fb3..3f3598d84 100644
--- a/src/lib-sieve-tool/sieve-tool.c
+++ b/src/lib-sieve-tool/sieve-tool.c
@@ -275,9 +275,8 @@ sieve_tool_init_finish(struct sieve_tool *tool, bool init_mailstore,
 	svenv.delivery_phase = SIEVE_DELIVERY_PHASE_POST;
 
 	/* Initialize Sieve Engine */
-	tool->svinst = sieve_init(&svenv, &sieve_tool_callbacks, tool,
-				  tool->debug);
-	if (tool->svinst == NULL)
+	if (sieve_init(&svenv, &sieve_tool_callbacks, tool, tool->debug,
+		       &tool->svinst) < 0)
 		i_fatal("Failed to initialize Sieve");
 
 	/* Load Sieve plugins */
diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c
index 4e2b4fd08..1ee5336bc 100644
--- a/src/lib-sieve/sieve.c
+++ b/src/lib-sieve/sieve.c
@@ -51,14 +51,16 @@ struct event_category event_category_sieve = {
  * Main Sieve library interface
  */
 
-struct sieve_instance *
-sieve_init(const struct sieve_environment *env,
-	   const struct sieve_callbacks *callbacks, void *context, bool debug)
+int sieve_init(const struct sieve_environment *env,
+	       const struct sieve_callbacks *callbacks, void *context,
+	       bool debug, struct sieve_instance **svinst_r)
 {
 	struct sieve_instance *svinst;
 	const char *domain;
 	pool_t pool;
 
+	*svinst_r = NULL;
+
 	/* Create Sieve engine instance */
 	pool = pool_alloconly_create("sieve", 8192);
 	svinst = p_new(pool, struct sieve_instance, 1);
@@ -117,7 +119,7 @@ sieve_init(const struct sieve_environment *env,
 	/* Initialize extensions */
 	if (!sieve_extensions_init(svinst)) {
 		sieve_deinit(&svinst);
-		return NULL;
+		return -1;
 	}
 
 	/* Initialize storage classes */
@@ -129,7 +131,8 @@ sieve_init(const struct sieve_environment *env,
 	/* Configure extensions */
 	sieve_extensions_configure(svinst);
 
-	return svinst;
+	*svinst_r = svinst;
+	return 0;
 }
 
 void sieve_deinit(struct sieve_instance **_svinst)
diff --git a/src/lib-sieve/sieve.h b/src/lib-sieve/sieve.h
index 5f23f2304..2ee15a6ed 100644
--- a/src/lib-sieve/sieve.h
+++ b/src/lib-sieve/sieve.h
@@ -14,9 +14,9 @@ struct sieve_binary;
 
 /* Initialize the sieve engine. Must be called before any sieve functionality is
    used. */
-struct sieve_instance *
-sieve_init(const struct sieve_environment *env,
-	   const struct sieve_callbacks *callbacks, void *context, bool debug);
+int sieve_init(const struct sieve_environment *env,
+	       const struct sieve_callbacks *callbacks, void *context,
+	       bool debug, struct sieve_instance **svinst_r);
 
 /* Free all memory allocated by the sieve engine. */
 void sieve_deinit(struct sieve_instance **_svinst);
diff --git a/src/managesieve/managesieve-capabilities.c b/src/managesieve/managesieve-capabilities.c
index 34d9fadd7..ddac5a4d0 100644
--- a/src/managesieve/managesieve-capabilities.c
+++ b/src/managesieve/managesieve-capabilities.c
@@ -77,9 +77,8 @@ void managesieve_capabilities_dump(void)
 	i_zero(&svenv);
 	svenv.home_dir = "/tmp";
 
-	svinst = sieve_init(&svenv, &sieve_callbacks,
-			    (void *) global_plugin_settings, FALSE);
-	if (svinst == NULL)
+	if (sieve_init(&svenv, &sieve_callbacks, (void *)global_plugin_settings,
+		       FALSE, &svinst) < 0)
 		i_fatal("Failed to initialize Sieve");
 
 	/* Dump capabilities */
diff --git a/src/managesieve/managesieve-client.c b/src/managesieve/managesieve-client.c
index 1ae8e1e6d..f6627d8ac 100644
--- a/src/managesieve/managesieve-client.c
+++ b/src/managesieve/managesieve-client.c
@@ -125,9 +125,8 @@ int client_create(int fd_in, int fd_out, const char *session_id,
 	svenv.event_parent = event;
 	svenv.flags = SIEVE_FLAG_HOME_RELATIVE;
 
-	svinst = sieve_init(&svenv, &managesieve_sieve_callbacks,
-			    user, set->mail_debug);
-	if (svinst == NULL) {
+	if (sieve_init(&svenv, &managesieve_sieve_callbacks, user,
+		       set->mail_debug, &svinst) < 0) {
 		*error_r = "Failed to initialize Sieve interpreter";
 		return -1;
 	}
diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c b/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c
index a5cedb496..c851e5f28 100644
--- a/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c
+++ b/src/plugins/doveadm-sieve/doveadm-sieve-cmd.c
@@ -112,9 +112,8 @@ doveadm_sieve_cmd_run(struct doveadm_mail_cmd_context *_ctx,
 	svenv.base_dir = user->set->base_dir;
 	svenv.flags = SIEVE_FLAG_HOME_RELATIVE;
 
-	ctx->svinst = sieve_init(&svenv, &sieve_callbacks, ctx,
-				 user->set->mail_debug);
-	if (ctx->svinst == NULL)
+	if (sieve_init(&svenv, &sieve_callbacks, ctx,
+		       user->set->mail_debug, &ctx->svinst) < 0)
 		return -1;
 
 	ctx->storage = sieve_storage_create_personal(
diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c
index 05abee587..2606e3f27 100644
--- a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c
+++ b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c
@@ -93,9 +93,8 @@ mail_sieve_user_init(struct mail_user *user, struct sieve_storage **svstorage_r)
 	svenv.base_dir = user->set->base_dir;
 	svenv.flags = SIEVE_FLAG_HOME_RELATIVE;
 
-	suser->svinst = sieve_init(&svenv, &mail_sieve_callbacks,
-				   user, user->set->mail_debug);
-	if (suser->svinst == NULL)
+	if (sieve_init(&svenv, &mail_sieve_callbacks, user,
+		       user->set->mail_debug, &suser->svinst) < 0)
 		return -1;
 
 	suser->sieve_storage =
diff --git a/src/plugins/imap-filter-sieve/imap-filter-sieve.c b/src/plugins/imap-filter-sieve/imap-filter-sieve.c
index c275d90eb..95bd45fa2 100644
--- a/src/plugins/imap-filter-sieve/imap-filter-sieve.c
+++ b/src/plugins/imap-filter-sieve/imap-filter-sieve.c
@@ -96,9 +96,8 @@ imap_filter_sieve_get_svinst(struct imap_filter_sieve_context *sctx)
 	svenv.location = SIEVE_ENV_LOCATION_MS;
 	svenv.delivery_phase = SIEVE_DELIVERY_PHASE_POST;
 
-	ifsuser->svinst = sieve_init(&svenv, &imap_filter_sieve_callbacks,
-				     ifsuser, debug);
-	if (ifsuser->svinst == NULL)
+	if (sieve_init(&svenv, &imap_filter_sieve_callbacks, ifsuser, debug,
+		       &ifsuser->svinst) < 0)
 		return NULL;
 
 	ifsuser->master_ehandler =
diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c
index 0aaf363c1..88f456b3f 100644
--- a/src/plugins/imapsieve/imap-sieve.c
+++ b/src/plugins/imapsieve/imap-sieve.c
@@ -88,9 +88,8 @@ struct imap_sieve *imap_sieve_init(struct client *client)
 
 	isieve->home_dir = p_strdup(pool, svenv.home_dir);
 
-	isieve->svinst = sieve_init(&svenv, &mail_sieve_callbacks, isieve,
-				    debug);
-	if (isieve->svinst == NULL)
+	if (sieve_init(&svenv, &mail_sieve_callbacks, isieve,
+		       debug, &isieve->svinst) < 0)
 		return isieve;
 
 	isieve->ext_imapsieve = sieve_extension_replace(
diff --git a/src/plugins/lda-sieve/lda-sieve-plugin.c b/src/plugins/lda-sieve/lda-sieve-plugin.c
index 66bd0e859..cc5e3c088 100644
--- a/src/plugins/lda-sieve/lda-sieve-plugin.c
+++ b/src/plugins/lda-sieve/lda-sieve-plugin.c
@@ -1069,8 +1069,8 @@ lda_sieve_deliver_mail(struct mail_deliver_context *mdctx,
 	svenv.location = SIEVE_ENV_LOCATION_MDA;
 	svenv.delivery_phase = SIEVE_DELIVERY_PHASE_DURING;
 
-	srctx.svinst = sieve_init(&svenv, &lda_sieve_callbacks, mdctx, debug);
-	if (srctx.svinst == NULL)
+	if (sieve_init(&svenv, &lda_sieve_callbacks, mdctx, debug,
+		       &srctx.svinst) < 0)
 		return -1;
 
 	/* Initialize master error handler */
-- 
GitLab