diff --git a/Makefile.am b/Makefile.am
index 2b53db44386f2be5b3c68779a2e9e9149ea63428..a1e1eb6e7ff06079fd21e86ed6868cf59856676d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -130,6 +130,7 @@ test_cases = \
 	tests/extensions/editheader/deleteheader.svtest \
 	tests/extensions/editheader/alternating.svtest \
 	tests/extensions/editheader/utf8.svtest \
+	tests/extensions/editheader/errors.svtest \
 	tests/extensions/vnd.dovecot/debug/execute.svtest \
 	tests/deprecated/notify/basic.svtest \
 	tests/deprecated/notify/mailto.svtest \
diff --git a/tests/extensions/editheader/errors.svtest b/tests/extensions/editheader/errors.svtest
new file mode 100644
index 0000000000000000000000000000000000000000..b29cfd4b3146eba8396a3b6366f5bdc95ee805b9
--- /dev/null
+++ b/tests/extensions/editheader/errors.svtest
@@ -0,0 +1,49 @@
+require "vnd.dovecot.testsuite";
+require "comparator-i;ascii-numeric";
+require "relational";
+
+require "editheader";
+
+test "Invalid field-name" {
+	if test_script_compile "errors/field-name.sieve" {
+		test_fail "compile should have failed";
+	}
+
+	if not test_error :count "eq" :comparator "i;ascii-numeric" "5" {
+		test_fail "wrong number of errors reported";
+	}
+
+	if not test_error :index 1 :matches "*field name*X-field:*invalid" {
+		test_fail "wrong error reported";
+	}
+
+	if not test_error :index 2 :matches "*field name*X field*invalid" {
+		test_fail "wrong error reported";
+	}
+
+	if not test_error :index 3 :matches "*field name*X-field:*invalid" {
+		test_fail "wrong error reported";
+	}
+
+	if not test_error :index 4 :matches "*field name*X field*invalid" {
+		test_fail "wrong error reported";
+	}
+}
+
+test "Invalid field-name at runtime " {
+	if not test_script_compile "errors/field-name-runtime.sieve" {
+		test_fail "compile failed";
+	}
+
+	if test_script_run {
+		test_fail "run should have failed";		
+	}
+
+	if not test_error :count "eq" :comparator "i;ascii-numeric" "1" {
+		test_fail "wrong number of errors reported";
+	}
+
+	if not test_error :matches "*field name*X-field:*invalid" {
+		test_fail "wrong error reported";
+	}
+}
diff --git a/tests/extensions/editheader/errors/field-name-runtime.sieve b/tests/extensions/editheader/errors/field-name-runtime.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..3f344617bd6663ad37a7afdc9f160e737936f78c
--- /dev/null
+++ b/tests/extensions/editheader/errors/field-name-runtime.sieve
@@ -0,0 +1,6 @@
+require "editheader";
+require "variables";
+
+set "header" "X-field:";
+
+addheader "${header}" "Frop";
diff --git a/tests/extensions/editheader/errors/field-name.sieve b/tests/extensions/editheader/errors/field-name.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..469bfc86ade62c3beb1ca559edd519e12588e899
--- /dev/null
+++ b/tests/extensions/editheader/errors/field-name.sieve
@@ -0,0 +1,19 @@
+require "editheader";
+
+# Ok
+addheader "X-field" "Frop";
+
+# Invalid ':'
+addheader "X-field:" "Frop";
+
+# Invalid ' '
+addheader "X field" "Frop";
+
+# Ok
+deleteheader "X-field";
+
+# Invalid ':'
+deleteheader "X-field:";
+
+# Invalid ' '
+deleteheader "X field";