diff --git a/src/lib-sieve/storage/file/sieve-file-script-sequence.c b/src/lib-sieve/storage/file/sieve-file-script-sequence.c
index 8cbc682eca166edb4662cd4aea481c61a105b1a6..c21e74d9595052c2253114270ec3d3c60ec0595e 100644
--- a/src/lib-sieve/storage/file/sieve-file-script-sequence.c
+++ b/src/lib-sieve/storage/file/sieve-file-script-sequence.c
@@ -223,9 +223,9 @@ int sieve_file_script_sequence_next(struct sieve_script_sequence *sseq,
 			return 0;
 
 		for (;;) {
-			fscript = sieve_file_script_open_from_filename(
-				fstorage, files[fseq->index++], NULL);
-			if (fscript != NULL)
+			if (sieve_file_script_open_from_filename(
+				fstorage, files[fseq->index++], NULL,
+				&fscript) == 0)
 				break;
 			if (sseq->storage->error_code != SIEVE_ERROR_NOT_FOUND)
 				break;
diff --git a/src/lib-sieve/storage/file/sieve-file-script.c b/src/lib-sieve/storage/file/sieve-file-script.c
index 488a56a80eb7493f689d8dec97c2a912b5ebcf17..8fddb77d1bd6bb1cfb9df7e7debb0f9c6490d7d8 100644
--- a/src/lib-sieve/storage/file/sieve-file-script.c
+++ b/src/lib-sieve/storage/file/sieve-file-script.c
@@ -138,26 +138,29 @@ int sieve_file_script_init_from_filename(struct sieve_file_storage *fstorage,
 	return 0;
 }
 
-struct sieve_file_script *
-sieve_file_script_open_from_filename(struct sieve_file_storage *fstorage,
-				     const char *filename,
-				     const char *scriptname)
+int sieve_file_script_open_from_filename(struct sieve_file_storage *fstorage,
+					 const char *filename,
+					 const char *scriptname,
+					 struct sieve_file_script **fscript_r)
 {
 	struct sieve_file_script *fscript;
 	enum sieve_error error_code;
 
-	if (sieve_file_script_init_from_filename(fstorage, filename,
-						 scriptname, &fscript) < 0)
-		return NULL;
+	*fscript_r = NULL;
+
+	if (sieve_file_script_init_from_filename(fstorage, filename, scriptname,
+						 &fscript) < 0)
+		return -1;
 
 	if (sieve_script_open(&fscript->script, &error_code) < 0) {
 		struct sieve_script *script = &fscript->script;
 
 		sieve_script_unref(&script);
-		return NULL;
+		return -1;
 	}
 
-	return fscript;
+	*fscript_r = fscript;
+	return 0;
 }
 
 struct sieve_file_script *
diff --git a/src/lib-sieve/storage/file/sieve-file-storage.h b/src/lib-sieve/storage/file/sieve-file-storage.h
index 764668c8c499eb68a8eaf67e6e2d7762a8f830b9..7c0d920e42b71a6d64e110d7e801551668b0ae0d 100644
--- a/src/lib-sieve/storage/file/sieve-file-storage.h
+++ b/src/lib-sieve/storage/file/sieve-file-storage.h
@@ -140,10 +140,10 @@ int sieve_file_script_init_from_filename(struct sieve_file_storage *fstorage,
 					 const char *filename,
 					 const char *scriptname,
 					 struct sieve_file_script **fscript_r);
-struct sieve_file_script *
-sieve_file_script_open_from_filename(struct sieve_file_storage *fstorage,
-				     const char *filename,
-				     const char *scriptname);
+int sieve_file_script_open_from_filename(struct sieve_file_storage *fstorage,
+					 const char *filename,
+					 const char *scriptname,
+					 struct sieve_file_script **fscript_r);
 struct sieve_file_script *
 sieve_file_script_init_from_name(struct sieve_file_storage *fstorage,
 				 const char *name);