From 8f6f6feacdc2b74f3c46fc51a66acabb32012c40 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan.bosch@open-xchange.com>
Date: Fri, 21 Jun 2024 01:21:48 +0200
Subject: [PATCH] lib-sieve: sieve-storage - Make sieve_storage_unref(NULL) a
 no-op

---
 src/lib-sieve/plugins/include/ext-include-common.c |  6 ++----
 src/lib-sieve/sieve-storage.c                      | 11 +++++------
 src/lib-sieve/storage/file/sieve-file-storage.c    |  4 +---
 src/plugins/imap-filter-sieve/imap-filter-sieve.c  |  6 ++----
 src/plugins/imapsieve/imap-sieve.c                 |  3 +--
 5 files changed, 11 insertions(+), 19 deletions(-)

diff --git a/src/lib-sieve/plugins/include/ext-include-common.c b/src/lib-sieve/plugins/include/ext-include-common.c
index 7249ad73d..114a4f625 100644
--- a/src/lib-sieve/plugins/include/ext-include-common.c
+++ b/src/lib-sieve/plugins/include/ext-include-common.c
@@ -119,10 +119,8 @@ void ext_include_unload(const struct sieve_extension *ext)
 	struct ext_include_context *ctx =
 		(struct ext_include_context *)ext->context;
 
-	if (ctx->global_storage != NULL)
-		sieve_storage_unref(&ctx->global_storage);
-	if (ctx->personal_storage != NULL)
-		sieve_storage_unref(&ctx->personal_storage);
+	sieve_storage_unref(&ctx->global_storage);
+	sieve_storage_unref(&ctx->personal_storage);
 
 	i_free(ctx->global_location);
 	i_free(ctx);
diff --git a/src/lib-sieve/sieve-storage.c b/src/lib-sieve/sieve-storage.c
index 52eceb44a..3a25bd3e2 100644
--- a/src/lib-sieve/sieve-storage.c
+++ b/src/lib-sieve/sieve-storage.c
@@ -340,7 +340,6 @@ sieve_storage_init(struct sieve_instance *svinst,
 					     &location, &options) < 0) {
 			*error_r = SIEVE_ERROR_TEMP_FAILURE;
 			sieve_storage_unref(&storage);
-			storage = NULL;
 		} else {
 			storage->location = p_strdup(storage->pool, location);
 
@@ -348,10 +347,8 @@ sieve_storage_init(struct sieve_instance *svinst,
 				      storage->location);
 
 			if (storage_class->v.init(storage, options,
-						  error_r) < 0) {
+						  error_r) < 0)
 				sieve_storage_unref(&storage);
-				storage = NULL;
-			}
 		}
 	} T_END;
 
@@ -574,8 +571,11 @@ void sieve_storage_unref(struct sieve_storage **_storage)
 {
 	struct sieve_storage *storage = *_storage;
 
-	i_assert(storage->refcount > 0);
+	if (storage == NULL)
+		return;
+	*_storage = NULL;
 
+	i_assert(storage->refcount > 0);
 	if (--storage->refcount != 0)
 		return;
 
@@ -592,7 +592,6 @@ void sieve_storage_unref(struct sieve_storage **_storage)
 	i_free(storage->error);
 	event_unref(&storage->event);
 	pool_unref(&storage->pool);
-	*_storage = NULL;
 }
 
 int sieve_storage_setup_bindir(struct sieve_storage *storage, mode_t mode)
diff --git a/src/lib-sieve/storage/file/sieve-file-storage.c b/src/lib-sieve/storage/file/sieve-file-storage.c
index 3f470c10c..837a53e1a 100644
--- a/src/lib-sieve/storage/file/sieve-file-storage.c
+++ b/src/lib-sieve/storage/file/sieve-file-storage.c
@@ -708,10 +708,8 @@ sieve_file_storage_init_default(struct sieve_instance *svinst,
 
 	T_BEGIN {
 		if (sieve_file_storage_do_init_default(fstorage, active_path,
-						       error_r) < 0) {
+						       error_r) < 0)
 			sieve_storage_unref(&storage);
-			storage = NULL;
-		}
 	} T_END;
 
 	return storage;
diff --git a/src/plugins/imap-filter-sieve/imap-filter-sieve.c b/src/plugins/imap-filter-sieve/imap-filter-sieve.c
index 9230ae720..5c28ac131 100644
--- a/src/plugins/imap-filter-sieve/imap-filter-sieve.c
+++ b/src/plugins/imap-filter-sieve/imap-filter-sieve.c
@@ -1123,10 +1123,8 @@ static void imap_filter_sieve_user_deinit(struct mail_user *user)
 
 	sieve_error_handler_unref(&ifsuser->master_ehandler);
 
-	if (ifsuser->storage != NULL)
-		sieve_storage_unref(&ifsuser->storage);
-	if (ifsuser->global_storage != NULL)
-		sieve_storage_unref(&ifsuser->global_storage);
+	sieve_storage_unref(&ifsuser->storage);
+	sieve_storage_unref(&ifsuser->global_storage);
 	sieve_deinit(&ifsuser->svinst);
 	if (ifsuser->dup_db != NULL)
 		mail_duplicate_db_deinit(&ifsuser->dup_db);
diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c
index 683491b75..57f3ef13c 100644
--- a/src/plugins/imapsieve/imap-sieve.c
+++ b/src/plugins/imapsieve/imap-sieve.c
@@ -112,8 +112,7 @@ void imap_sieve_deinit(struct imap_sieve **_isieve)
 
 	sieve_error_handler_unref(&isieve->master_ehandler);
 
-	if (isieve->storage != NULL)
-		sieve_storage_unref(&isieve->storage);
+	sieve_storage_unref(&isieve->storage);
 	sieve_extension_unregister(isieve->ext_imapsieve);
 	sieve_extension_unregister(isieve->ext_vnd_imapsieve);
 	sieve_deinit(&isieve->svinst);
-- 
GitLab