diff --git a/src/plugins/imap-filter-sieve/imap-filter-sieve.c b/src/plugins/imap-filter-sieve/imap-filter-sieve.c
index 5c28ac1315d29ed6a999e3e9220617589c811ec5..a6cb2e79dfe5e152306eebdf64b6eee7f9d22436 100644
--- a/src/plugins/imap-filter-sieve/imap-filter-sieve.c
+++ b/src/plugins/imap-filter-sieve/imap-filter-sieve.c
@@ -98,6 +98,8 @@ imap_filter_sieve_get_svinst(struct imap_filter_sieve_context *sctx)
 
 	ifsuser->svinst = sieve_init(&svenv, &imap_filter_sieve_callbacks,
 				     ifsuser, debug);
+	if (ifsuser->svinst == NULL)
+		return NULL;
 
 	ifsuser->master_ehandler =
 		sieve_master_ehandler_create(ifsuser->svinst, 0);
@@ -116,6 +118,8 @@ imap_filter_sieve_init_trace_log(struct imap_filter_sieve_context *sctx,
 	struct client_command_context *cmd = sctx->filter_context->cmd;
 	struct mail_user *user = sctx->user;
 
+	i_assert(svinst != NULL);
+
 	if (sctx->trace_log_initialized) {
 		*trace_config_r = sctx->trace_config;
 		*trace_log_r = sctx->trace_log;
@@ -180,6 +184,12 @@ imap_filter_sieve_get_personal_storage(struct imap_filter_sieve_context *sctx,
 	// FIXME: limit interval between retries
 
 	svinst = imap_filter_sieve_get_svinst(sctx);
+	if (svinst == NULL) {
+		*error_r = "Sieve processing is not available";
+		*error_code_r = MAIL_ERROR_UNAVAILABLE;
+		return -1;
+	}
+
 	ifsuser->storage = sieve_storage_create_main(svinst, user,
 						     storage_flags, &error);
 	if (ifsuser->storage != NULL) {
@@ -228,6 +238,11 @@ imap_filter_sieve_get_global_storage(struct imap_filter_sieve_context *sctx,
 	}
 
 	svinst = imap_filter_sieve_get_svinst(sctx);
+	if (svinst == NULL) {
+		*error_r = "Sieve processing is not available";
+		*error_code_r = MAIL_ERROR_UNAVAILABLE;
+		return -1;
+	}
 
 	location = mail_user_plugin_getenv(user, "sieve_global");
 	if (location == NULL) {
@@ -315,6 +330,8 @@ imap_filter_sieve_create_error_handler(struct imap_filter_sieve_context *sctx)
 {
 	struct sieve_instance *svinst = imap_filter_sieve_get_svinst(sctx);
 
+	i_assert(svinst != NULL);
+
 	/* Prepare error handler */
 	if (sctx->errors == NULL)
 		sctx->errors = str_new(default_pool, 1024);
@@ -345,6 +362,8 @@ imap_sieve_filter_open_script(struct imap_filter_sieve_context *sctx,
 	struct sieve_binary *sbin;
 	const char *compile_name = "compile";
 
+	i_assert(svinst != NULL);
+
 	if (recompile) {
 		/* Warn */
 		e_warning(sieve_get_event(svinst),
@@ -474,6 +493,8 @@ void imap_filter_sieve_open_input(struct imap_filter_sieve_context *sctx,
 	struct sieve_script *script;
 
 	svinst = imap_filter_sieve_get_svinst(sctx);
+	i_assert(svinst != NULL);
+
 	script = sieve_data_script_create_from_input(svinst, "script", input);
 
 	sctx->user_script = script;
@@ -955,6 +976,8 @@ int imap_sieve_filter_run_init(struct imap_filter_sieve_context *sctx)
 	struct mail_user *user = sctx->user;
 	const char *error;
 
+	if (svinst == NULL)
+		return -1;
 	if (sieve_script_env_init(scriptenv, user, &error) < 0) {
 		e_error(sieve_get_event(svinst),
 			"Failed to initialize script execution: %s",
@@ -991,6 +1014,8 @@ imap_sieve_filter_get_msgdata(struct imap_filter_sieve_context *sctx,
 	struct smtp_address *user_addr;
 	int ret;
 
+	i_assert(svinst != NULL);
+
 	mail_from = NULL;
 	if ((ret = mail_get_special(mail, MAIL_FETCH_FROM_ENVELOPE,
 				    &address)) > 0 &&