From 8b889a60191002c43a65240ffeb55ddcea60a78b Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Sat, 31 Aug 2024 22:55:46 +0200
Subject: [PATCH] lib-sieve: sieve-binary - Use int for sieve_binary_open()
 status result

---
 src/lib-sieve/sieve-binary-file.c              | 17 ++++++++++-------
 src/lib-sieve/sieve-binary.h                   |  6 +++---
 src/lib-sieve/sieve.c                          |  6 +++++-
 src/lib-sieve/storage/dict/sieve-dict-script.c |  7 +++++--
 src/lib-sieve/storage/file/sieve-file-script.c |  7 +++++--
 src/lib-sieve/storage/ldap/sieve-ldap-script.c |  7 +++++--
 6 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/src/lib-sieve/sieve-binary-file.c b/src/lib-sieve/sieve-binary-file.c
index 9936965bd..a28f36a6f 100644
--- a/src/lib-sieve/sieve-binary-file.c
+++ b/src/lib-sieve/sieve-binary-file.c
@@ -909,9 +909,9 @@ _sieve_binary_open(struct sieve_binary *sbin, enum sieve_error *error_code_r)
 	return TRUE;
 }
 
-struct sieve_binary *
-sieve_binary_open(struct sieve_instance *svinst, const char *path,
-		  struct sieve_script *script, enum sieve_error *error_code_r)
+int sieve_binary_open(struct sieve_instance *svinst, const char *path,
+		      struct sieve_script *script, struct sieve_binary **sbin_r,
+		      enum sieve_error *error_code_r)
 {
 	struct sieve_binary_extension_reg *const *regs;
 	unsigned int ext_count, i;
@@ -919,6 +919,7 @@ sieve_binary_open(struct sieve_instance *svinst, const char *path,
 	struct sieve_binary_file *file;
 
 	i_assert(script == NULL || sieve_script_svinst(script) == svinst);
+	*sbin_r = NULL;
 
 	/* Create binary object */
 	sbin = sieve_binary_create(svinst, script);
@@ -926,7 +927,7 @@ sieve_binary_open(struct sieve_instance *svinst, const char *path,
 
 	if (sieve_binary_file_open(sbin, path, &file, error_code_r) < 0) {
 		sieve_binary_unref(&sbin);
-		return NULL;
+		return -1;
 	}
 
 	sbin->file = file;
@@ -937,7 +938,7 @@ sieve_binary_open(struct sieve_instance *svinst, const char *path,
 
 	if (!_sieve_binary_open(sbin, error_code_r)) {
 		sieve_binary_unref(&sbin);
-		return NULL;
+		return -1;
 	}
 
 	sieve_binary_activate(sbin);
@@ -954,10 +955,12 @@ sieve_binary_open(struct sieve_instance *svinst, const char *path,
 			if (error_code_r != NULL)
 				*error_code_r = SIEVE_ERROR_NOT_VALID;
 			sieve_binary_unref(&sbin);
-			return NULL;
+			return -1;
 		}
 	}
-	return sbin;
+
+	*sbin_r = sbin;
+	return 0;
 }
 
 int sieve_binary_check_executable(struct sieve_binary *sbin,
diff --git a/src/lib-sieve/sieve-binary.h b/src/lib-sieve/sieve-binary.h
index adff6c5c7..e9397b58e 100644
--- a/src/lib-sieve/sieve-binary.h
+++ b/src/lib-sieve/sieve-binary.h
@@ -79,9 +79,9 @@ int sieve_binary_save(struct sieve_binary *sbin, const char *path, bool update,
  * Loading the binary
  */
 
-struct sieve_binary *
-sieve_binary_open(struct sieve_instance *svinst, const char *path,
-		  struct sieve_script *script, enum sieve_error *error_code_r);
+int sieve_binary_open(struct sieve_instance *svinst, const char *path,
+		      struct sieve_script *script, struct sieve_binary **sbin_r,
+		      enum sieve_error *error_code_r);
 bool sieve_binary_up_to_date(struct sieve_binary *sbin,
 			     enum sieve_compile_flags cpflags);
 
diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c
index 6d61a0eef..1e8cd09cb 100644
--- a/src/lib-sieve/sieve.c
+++ b/src/lib-sieve/sieve.c
@@ -375,7 +375,11 @@ struct sieve_binary *
 sieve_load(struct sieve_instance *svinst, const char *bin_path,
 	   enum sieve_error *error_code_r)
 {
-	return sieve_binary_open(svinst, bin_path, NULL, error_code_r);
+	struct sieve_binary *sbin;
+
+	if (sieve_binary_open(svinst, bin_path, NULL, &sbin, error_code_r) < 0)
+		return NULL;
+	return sbin;
 }
 
 static struct sieve_binary *
diff --git a/src/lib-sieve/storage/dict/sieve-dict-script.c b/src/lib-sieve/storage/dict/sieve-dict-script.c
index e60fc7833..9ea88710c 100644
--- a/src/lib-sieve/storage/dict/sieve-dict-script.c
+++ b/src/lib-sieve/storage/dict/sieve-dict-script.c
@@ -230,12 +230,15 @@ sieve_dict_script_binary_load(struct sieve_script *script,
 {
 	struct sieve_dict_script *dscript =
 		container_of(script, struct sieve_dict_script, script);
+	struct sieve_binary *sbin;
 
 	if (sieve_dict_script_get_binpath(dscript) == NULL)
 		return NULL;
 
-	return sieve_binary_open(script->storage->svinst, dscript->binpath,
-				 script, error_code_r);
+	if (sieve_binary_open(script->storage->svinst, dscript->binpath,
+			      script, &sbin, error_code_r) < 0)
+		return NULL;
+	return sbin;
 }
 
 static int
diff --git a/src/lib-sieve/storage/file/sieve-file-script.c b/src/lib-sieve/storage/file/sieve-file-script.c
index c76c84844..910cb7354 100644
--- a/src/lib-sieve/storage/file/sieve-file-script.c
+++ b/src/lib-sieve/storage/file/sieve-file-script.c
@@ -538,9 +538,12 @@ sieve_file_script_binary_load(struct sieve_script *script,
 	struct sieve_file_script *fscript =
 		container_of(script, struct sieve_file_script, script);
 	struct sieve_instance *svinst = script->storage->svinst;
+	struct sieve_binary *sbin;
 
-	return sieve_binary_open(svinst, fscript->binpath, script,
-				 error_code_r);
+	if (sieve_binary_open(svinst, fscript->binpath, script,
+			      &sbin, error_code_r) < 0)
+		return NULL;
+	return sbin;
 }
 
 static int
diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-script.c b/src/lib-sieve/storage/ldap/sieve-ldap-script.c
index d8020cd18..027e0f21c 100644
--- a/src/lib-sieve/storage/ldap/sieve-ldap-script.c
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-script.c
@@ -253,12 +253,15 @@ sieve_ldap_script_binary_load(struct sieve_script *script,
 	struct sieve_storage *storage = script->storage;
 	struct sieve_ldap_script *lscript =
 		container_of(script, struct sieve_ldap_script, script);
+	struct sieve_binary *sbin;
 
 	if (sieve_ldap_script_get_binpath(lscript) == NULL)
 		return NULL;
 
-	return sieve_binary_open(storage->svinst, lscript->binpath, script,
-				 error_code_r);
+	if (sieve_binary_open(storage->svinst, lscript->binpath, script,
+			      &sbin, error_code_r) < 0)
+		return NULL;
+	return sbin;
 }
 
 static int
-- 
GitLab