From ca138776a27ca07cc1ea2b9e9b8505034412fceb Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Tue, 1 Oct 2024 13:52:56 +0200
Subject: [PATCH] lib-sieve: sieve-storage - Return error code from
 sieve_storage_alloc()

---
 src/lib-sieve/sieve-storage-private.h           |  3 ++-
 src/lib-sieve/sieve-storage.c                   |  9 ++++++---
 src/lib-sieve/storage/data/sieve-data-script.c  |  4 ++--
 src/lib-sieve/storage/file/sieve-file-storage.c | 10 ++++++----
 4 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/lib-sieve/sieve-storage-private.h b/src/lib-sieve/sieve-storage-private.h
index b84ba3481..8b609f51d 100644
--- a/src/lib-sieve/sieve-storage-private.h
+++ b/src/lib-sieve/sieve-storage-private.h
@@ -121,7 +121,8 @@ struct sieve_storage {
 int sieve_storage_alloc(struct sieve_instance *svinst, struct event *event,
 			const struct sieve_storage *storage_class,
 			const char *data, enum sieve_storage_flags flags,
-			bool main, struct sieve_storage **storage_r);
+			bool main, struct sieve_storage **storage_r,
+			enum sieve_error *error_code_r);
 
 int sieve_storage_setup_bin_path(struct sieve_storage *storage, mode_t mode);
 
diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c
index 3558ae51e..0437f47d4 100644
--- a/src/lib-sieve/sieve-storage.c
+++ b/src/lib-sieve/sieve-storage.c
@@ -320,12 +320,14 @@ sieve_storage_alloc_from_class(struct sieve_instance *svinst,
 int sieve_storage_alloc(struct sieve_instance *svinst, struct event *event,
 			const struct sieve_storage *storage_class,
 			const char *data, enum sieve_storage_flags flags,
-			bool main, struct sieve_storage **storage_r)
+			bool main, struct sieve_storage **storage_r,
+			enum sieve_error *error_code_r)
 {
 	struct sieve_storage *storage;
 	int ret;
 
 	*storage_r = NULL;
+	sieve_error_args_init(&error_code_r, NULL);
 
 	if (event != NULL)
 		event_ref(event);
@@ -381,9 +383,10 @@ sieve_storage_init_real(struct sieve_instance *svinst, struct event *event,
 	driver_event = sieve_storage_create_driver_event(
 		event, storage_class->driver_name);
 	ret = sieve_storage_alloc(svinst, driver_event, storage_class,
-				  data, flags, main, &storage);
+				  data, flags, main, &storage, error_code_r);
 	event_unref(&driver_event);
-	i_assert(ret == 0);
+	if (ret < 0)
+		return -1;
 	i_assert(storage != NULL);
 	i_assert(storage_class->v.init != NULL);
 
diff --git a/src/lib-sieve/storage/data/sieve-data-script.c b/src/lib-sieve/storage/data/sieve-data-script.c
index 1162b38f1..45065a2d2 100644
--- a/src/lib-sieve/storage/data/sieve-data-script.c
+++ b/src/lib-sieve/storage/data/sieve-data-script.c
@@ -39,8 +39,8 @@ sieve_data_script_create_from_input(struct sieve_instance *svinst,
 	int ret;
 
 	ret = sieve_storage_alloc(svinst, NULL, &sieve_data_storage,
-				  "", 0, FALSE, &storage);
-	i_assert(ret == 0);
+				  "", 0, FALSE, &storage, NULL);
+	i_assert(ret >= 0);
 
 	dscript = sieve_data_script_alloc();
 	sieve_script_init(&dscript->script, storage, &sieve_data_script,
diff --git a/src/lib-sieve/storage/file/sieve-file-storage.c b/src/lib-sieve/storage/file/sieve-file-storage.c
index bb04272a4..95a3d4377 100644
--- a/src/lib-sieve/storage/file/sieve-file-storage.c
+++ b/src/lib-sieve/storage/file/sieve-file-storage.c
@@ -695,8 +695,9 @@ int sieve_file_storage_init_default(struct sieve_instance *svinst,
 	int ret;
 
 	ret = sieve_storage_alloc(svinst, NULL, &sieve_file_storage,
-				  "", flags, TRUE, &storage);
-	i_assert(ret == 0);
+				  "", flags, TRUE, &storage, error_code_r);
+	if (ret < 0)
+		return -1;
 	fstorage = container_of(storage, struct sieve_file_storage, storage);
 
 	T_BEGIN {
@@ -727,8 +728,9 @@ int sieve_file_storage_init_from_path(struct sieve_instance *svinst,
 	sieve_error_args_init(&error_code_r, NULL);
 
 	ret = sieve_storage_alloc(svinst, NULL, &sieve_file_storage,
-				  "", flags, FALSE, &storage);
-	i_assert(ret == 0);
+				  "", flags, FALSE, &storage, error_code_r);
+	if (ret < 0)
+		return -1;
 	fstorage = container_of(storage, struct sieve_file_storage, storage);
 
 	T_BEGIN {
-- 
GitLab