From 2faf53290568780e47b0e68704bab27d60b34666 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@rename-it.nl>
Date: Tue, 3 Aug 2010 15:58:36 +0200
Subject: [PATCH] Fixed bug in error handling of store action.

---
 src/lib-sieve/sieve-actions.c                 |  3 ++-
 tests/execute/errors.svtest                   | 25 +++++++++++++++++++
 .../errors/fileinto-invalid-name.sieve        |  5 ++++
 3 files changed, 32 insertions(+), 1 deletion(-)
 create mode 100644 tests/execute/errors/fileinto-invalid-name.sieve

diff --git a/src/lib-sieve/sieve-actions.c b/src/lib-sieve/sieve-actions.c
index b0f751751..4aa3f5990 100644
--- a/src/lib-sieve/sieve-actions.c
+++ b/src/lib-sieve/sieve-actions.c
@@ -408,7 +408,8 @@ static bool act_store_start
 
 	*tr_context = (void *)trans;
 
-	return TRUE;
+	return ( trans->error_code == MAIL_ERROR_NONE || 
+		trans->error_code == MAIL_ERROR_NOTFOUND );
 }
 
 static struct mail_keywords *act_store_keywords_create
diff --git a/tests/execute/errors.svtest b/tests/execute/errors.svtest
index 383df8b4c..ec5c57846 100644
--- a/tests/execute/errors.svtest
+++ b/tests/execute/errors.svtest
@@ -2,6 +2,7 @@ require "vnd.dovecot.testsuite";
 
 require "relational";
 require "comparator-i;ascii-numeric";
+require "fileinto";
 
 test "Action conflicts: reject <-> fileinto" {
 	if not test_script_compile "errors/conflict-reject-fileinto.sieve" {
@@ -108,3 +109,27 @@ test "Fileinto missing folder" {
 	}
 }
 
+test "Fileinto invalid folder name" {
+	if not test_script_compile "errors/fileinto-invalid-name.sieve" {
+		test_fail "compile failed";
+	}
+
+	if not test_script_run {
+		test_fail "execution failed";
+	}
+
+	if test_result_execute {
+		test_fail "execution of result should have failed";
+	}
+
+	if not test_error :count "eq" :comparator "i;ascii-numeric" "1" {
+		test_fail "wrong number of runtime errors reported";
+	}
+
+	if not allof (
+		test_error :index 1 :contains "failed to store into mailbox",
+		test_error :index 1 :contains "name") {
+		test_fail "unexpected error reported";
+	}
+}
+
diff --git a/tests/execute/errors/fileinto-invalid-name.sieve b/tests/execute/errors/fileinto-invalid-name.sieve
new file mode 100644
index 000000000..871323e0e
--- /dev/null
+++ b/tests/execute/errors/fileinto-invalid-name.sieve
@@ -0,0 +1,5 @@
+require "fileinto";
+require "mailbox";
+
+fileinto :create "foo//somedomain/org";
+
-- 
GitLab