dovecot-2.2-pigeonhole: lib-sieve: Erroneously decoded mime-enco...

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Tue May 5 11:44:33 UTC 2015


details:   http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/a3d26f12c2cd
changeset: 2043:a3d26f12c2cd
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Tue May 05 13:42:38 2015 +0200
description:
lib-sieve: Erroneously decoded mime-encoded words in address headers.

diffstat:

 src/lib-sieve/plugins/date/tst-date.c   |   2 +-
 src/lib-sieve/plugins/index/tag-index.c |   3 ++-
 src/lib-sieve/sieve-message.c           |   9 +++++----
 src/lib-sieve/sieve-message.h           |   4 ++--
 src/lib-sieve/tst-address.c             |   2 +-
 src/lib-sieve/tst-exists.c              |   2 +-
 src/lib-sieve/tst-header.c              |   2 +-
 tests/test-address.svtest               |  25 +++++++++++++++++++++++++
 8 files changed, 38 insertions(+), 11 deletions(-)

diffs (164 lines):

diff -r 89e0cef5b264 -r a3d26f12c2cd src/lib-sieve/plugins/date/tst-date.c
--- a/src/lib-sieve/plugins/date/tst-date.c	Tue May 05 10:41:45 2015 +0200
+++ b/src/lib-sieve/plugins/date/tst-date.c	Tue May 05 13:42:38 2015 +0200
@@ -471,7 +471,7 @@
 		/* Get header */
 		sieve_runtime_trace_descend(renv);
 		if ( (ret=sieve_message_get_header_fields
-			(renv, hdr_list, &svmos, &hdr_value_list)) <= 0 )
+			(renv, hdr_list, &svmos, FALSE, &hdr_value_list)) <= 0 )
 			return ret;
 		sieve_runtime_trace_ascend(renv);
 
diff -r 89e0cef5b264 -r a3d26f12c2cd src/lib-sieve/plugins/index/tag-index.c
--- a/src/lib-sieve/plugins/index/tag-index.c	Tue May 05 10:41:45 2015 +0200
+++ b/src/lib-sieve/plugins/index/tag-index.c	Tue May 05 13:42:38 2015 +0200
@@ -63,7 +63,7 @@
 static int svmo_index_header_override
 	(const struct sieve_message_override *svmo,
 		const struct sieve_runtime_env *renv,
-		struct sieve_stringlist **headers);
+		bool mime_decode, struct sieve_stringlist **headers);
 
 const struct sieve_message_override_def index_header_override = {
 	SIEVE_OBJECT("index", &index_operand, 0),
@@ -256,6 +256,7 @@
 static int svmo_index_header_override
 (const struct sieve_message_override *svmo,
 	const struct sieve_runtime_env *renv,
+	bool mime_decode ATTR_UNUSED,
 	struct sieve_stringlist **headers)
 {
 	struct svmo_index_context *ctx =
diff -r 89e0cef5b264 -r a3d26f12c2cd src/lib-sieve/sieve-message.c
--- a/src/lib-sieve/sieve-message.c	Tue May 05 10:41:45 2015 +0200
+++ b/src/lib-sieve/sieve-message.c	Tue May 05 13:42:38 2015 +0200
@@ -733,7 +733,7 @@
 (const struct sieve_runtime_env *renv,
 	struct sieve_stringlist *field_names,
 	ARRAY_TYPE(sieve_message_override) *svmos,
-	struct sieve_stringlist **fields_r)
+	bool mime_decode, struct sieve_stringlist **fields_r)
 {
 	const struct sieve_message_override *svmo;
 	unsigned int count, i;
@@ -742,7 +742,7 @@
 	if ( svmos == NULL || !array_is_created(svmos) ||
 		array_count(svmos) == 0 ) {
 		*fields_r = sieve_message_header_stringlist_create
-			(renv, field_names, TRUE);
+			(renv, field_names, mime_decode);
 		return SIEVE_EXEC_OK;
 	}
 
@@ -752,12 +752,13 @@
 		*fields_r = field_names;
 	} else {
 		*fields_r = sieve_message_header_stringlist_create
-			(renv, field_names, TRUE);
+			(renv, field_names, mime_decode);
 	}
 
 	for ( i = 0; i < count; i++ ) {
 		if ( svmo[i].def->header_override != NULL &&
-			(ret=svmo[i].def->header_override(&svmo[i], renv, fields_r)) <= 0 )
+			(ret=svmo[i].def->header_override
+				(&svmo[i], renv, mime_decode, fields_r)) <= 0 )
 			return ret;
 	}
 	return SIEVE_EXEC_OK;
diff -r 89e0cef5b264 -r a3d26f12c2cd src/lib-sieve/sieve-message.h
--- a/src/lib-sieve/sieve-message.h	Tue May 05 10:41:45 2015 +0200
+++ b/src/lib-sieve/sieve-message.h	Tue May 05 13:42:38 2015 +0200
@@ -102,7 +102,7 @@
 	int (*header_override)
 		(const struct sieve_message_override *svmo,
 			const struct sieve_runtime_env *renv,
-			struct sieve_stringlist **headers);
+			bool mime_decode, struct sieve_stringlist **headers);
 };
 
 struct sieve_message_override {
@@ -164,6 +164,6 @@
 	(const struct sieve_runtime_env *renv,
 		struct sieve_stringlist *field_names,
 		ARRAY_TYPE(sieve_message_override) *svmos,
-		struct sieve_stringlist **fields_r);
+		bool mime_decode, struct sieve_stringlist **fields_r);
 
 #endif /* __SIEVE_MESSAGE_H */
diff -r 89e0cef5b264 -r a3d26f12c2cd src/lib-sieve/tst-address.c
--- a/src/lib-sieve/tst-address.c	Tue May 05 10:41:45 2015 +0200
+++ b/src/lib-sieve/tst-address.c	Tue May 05 13:42:38 2015 +0200
@@ -261,7 +261,7 @@
 	/* Get header */
 	sieve_runtime_trace_descend(renv);
 	if ( (ret=sieve_message_get_header_fields
-		(renv, hdr_list, &svmos, &hdr_value_list)) <= 0 )
+		(renv, hdr_list, &svmos, FALSE, &hdr_value_list)) <= 0 )
 		return ret;
 	sieve_runtime_trace_ascend(renv);
 
diff -r 89e0cef5b264 -r a3d26f12c2cd src/lib-sieve/tst-exists.c
--- a/src/lib-sieve/tst-exists.c	Tue May 05 10:41:45 2015 +0200
+++ b/src/lib-sieve/tst-exists.c	Tue May 05 13:42:38 2015 +0200
@@ -151,7 +151,7 @@
 		/* Get header */
 		if ( (ret=sieve_message_get_header_fields
 			(renv, sieve_single_stringlist_create(renv, hdr_item, FALSE),
-				&svmos, &value_list) <= 0) )
+				&svmos, FALSE, &value_list) <= 0) )
 			return ret;
 
 		if ( (ret=sieve_stringlist_next_item(value_list, &dummy)) < 0)
diff -r 89e0cef5b264 -r a3d26f12c2cd src/lib-sieve/tst-header.c
--- a/src/lib-sieve/tst-header.c	Tue May 05 10:41:45 2015 +0200
+++ b/src/lib-sieve/tst-header.c	Tue May 05 13:42:38 2015 +0200
@@ -191,7 +191,7 @@
 	/* Get header */
 	sieve_runtime_trace_descend(renv);
 	if ( (ret=sieve_message_get_header_fields
-		(renv, hdr_list, &svmos, &value_list)) <= 0 )
+		(renv, hdr_list, &svmos, TRUE, &value_list)) <= 0 )
 		return ret;
 	sieve_runtime_trace_ascend(renv);
 
diff -r 89e0cef5b264 -r a3d26f12c2cd tests/test-address.svtest
--- a/tests/test-address.svtest	Tue May 05 10:41:45 2015 +0200
+++ b/tests/test-address.svtest	Tue May 05 13:42:38 2015 +0200
@@ -372,6 +372,30 @@
 }
 
 /*
+ * TEST: Mime encoding of '@' in display name
+ */
+
+test_set "message" text:
+From: "Frop <frop at example.org>"
+To: =?UTF-8?B?RnJpZXBAZnJvcA0K?=
+	<friep at example.com>
+Subject: Test
+
+Frop!
+.
+;
+
+
+test "Mime encoding of '@' in display name" {
+        # Relevant sieve rule:
+
+        if not address :is "To" 
+			["friep at example.com"] {
+                test_fail "Invalid address extracted";
+        }
+}
+
+/*
  * TEST: Erroneous mime encoding
  */
 
@@ -394,3 +418,4 @@
         }
 }
 
+


More information about the dovecot-cvs mailing list