dovecot-2.0-pigeonhole: Address test: removed header MIME-decodi...

pigeonhole at rename-it.nl pigeonhole at rename-it.nl
Sat Jan 1 15:10:59 EET 2011


details:   http://hg.rename-it.nl/dovecot-2.0-pigeonhole/rev/99f8dc1e246a
changeset: 1454:99f8dc1e246a
user:      Stephan Bosch <stephan at rename-it.nl>
date:      Sat Jan 01 14:10:53 2011 +0100
description:
Address test: removed header MIME-decoding to prevent address parsing problems.

diffstat:

 src/lib-sieve/plugins/date/tst-date.c |   4 ++--
 src/lib-sieve/sieve-message.c         |  29 +++++++++++++++++++++--------
 src/lib-sieve/sieve-message.h         |   5 +++--
 src/lib-sieve/tst-address.c           |   2 +-
 src/lib-sieve/tst-header.c            |   2 +-
 tests/test-address.svtest             |  24 ++++++++++++++++++++++++
 6 files changed, 52 insertions(+), 14 deletions(-)

diffs (142 lines):

diff -r 67d2240966ec -r 99f8dc1e246a src/lib-sieve/plugins/date/tst-date.c
--- a/src/lib-sieve/plugins/date/tst-date.c	Tue Dec 07 00:05:50 2010 +0100
+++ b/src/lib-sieve/plugins/date/tst-date.c	Sat Jan 01 14:10:53 2011 +0100
@@ -461,11 +461,11 @@
 	 */
 
 	if ( sieve_operation_is(op, date_operation) ) {
-	
+
 		sieve_runtime_trace(renv, SIEVE_TRLVL_TESTS, "date test");
 
 		/* Create value stringlist */
-		hdr_value_list = sieve_message_header_stringlist_create(renv, hdr_list);
+		hdr_value_list = sieve_message_header_stringlist_create(renv, hdr_list, FALSE);
 		value_list = ext_date_stringlist_create
 			(renv, hdr_value_list, time_zone, str_c(date_part));
 
diff -r 67d2240966ec -r 99f8dc1e246a src/lib-sieve/sieve-message.c
--- a/src/lib-sieve/sieve-message.c	Tue Dec 07 00:05:50 2010 +0100
+++ b/src/lib-sieve/sieve-message.c	Sat Jan 01 14:10:53 2011 +0100
@@ -266,20 +266,24 @@
 
 	const char *const *headers;
 	int headers_index;
+
+	unsigned int mime_decode:1;
 };
 
 struct sieve_stringlist *sieve_message_header_stringlist_create
-(const struct sieve_runtime_env *renv, struct sieve_stringlist *field_names)
+(const struct sieve_runtime_env *renv, struct sieve_stringlist *field_names,
+	bool mime_decode)
 {
 	struct sieve_message_header_stringlist *strlist;
-	    
+
 	strlist = t_new(struct sieve_message_header_stringlist, 1);
 	strlist->strlist.runenv = renv;
 	strlist->strlist.exec_status = SIEVE_EXEC_OK;
 	strlist->strlist.next_item = sieve_message_header_stringlist_next_item;
 	strlist->strlist.reset = sieve_message_header_stringlist_reset;
 	strlist->field_names = field_names;
-  
+	strlist->mime_decode = mime_decode;
+
 	return &strlist->strlist;
 }
 
@@ -334,11 +338,20 @@
 		}
 
 		/* Fetch all matching headers from the e-mail */
-		if ( mail_get_headers_utf8(mail, str_c(hdr_item), &strlist->headers) < 0 ||
-			( strlist->headers != NULL && strlist->headers[0] == NULL ) ) {
-			/* Try next item when this fails somehow */
-			strlist->headers = NULL;
-			continue;
+		if ( strlist->mime_decode ) {
+			if ( mail_get_headers_utf8(mail, str_c(hdr_item), &strlist->headers) < 0 ||
+				( strlist->headers != NULL && strlist->headers[0] == NULL ) ) {
+				/* Try next item when this fails somehow */
+				strlist->headers = NULL;
+				continue;
+			}
+		} else {
+			if ( mail_get_headers(mail, str_c(hdr_item), &strlist->headers) < 0 ||
+				( strlist->headers != NULL && strlist->headers[0] == NULL ) ) {
+				/* Try next item when this fails somehow */
+				strlist->headers = NULL;
+				continue;
+			}
 		}
 	}
 
diff -r 67d2240966ec -r 99f8dc1e246a src/lib-sieve/sieve-message.h
--- a/src/lib-sieve/sieve-message.h	Tue Dec 07 00:05:50 2010 +0100
+++ b/src/lib-sieve/sieve-message.h	Sat Jan 01 14:10:53 2011 +0100
@@ -58,6 +58,7 @@
  */
 
 struct sieve_stringlist *sieve_message_header_stringlist_create
-	(const struct sieve_runtime_env *renv, struct sieve_stringlist *field_names);
-	
+	(const struct sieve_runtime_env *renv, struct sieve_stringlist *field_names,
+		bool mime_decode);
+
 #endif /* __SIEVE_MESSAGE_H */
diff -r 67d2240966ec -r 99f8dc1e246a src/lib-sieve/tst-address.c
--- a/src/lib-sieve/tst-address.c	Tue Dec 07 00:05:50 2010 +0100
+++ b/src/lib-sieve/tst-address.c	Sat Jan 01 14:10:53 2011 +0100
@@ -254,7 +254,7 @@
 	sieve_runtime_trace(renv, SIEVE_TRLVL_TESTS, "address test");
 
 	/* Create value stringlist */
-	hdr_value_list = sieve_message_header_stringlist_create(renv, hdr_list);
+	hdr_value_list = sieve_message_header_stringlist_create(renv, hdr_list, FALSE);
 	addr_list = sieve_header_address_list_create(renv, hdr_value_list);
 	value_list = sieve_address_part_stringlist_create(renv, &addrp, addr_list);
 
diff -r 67d2240966ec -r 99f8dc1e246a src/lib-sieve/tst-header.c
--- a/src/lib-sieve/tst-header.c	Tue Dec 07 00:05:50 2010 +0100
+++ b/src/lib-sieve/tst-header.c	Sat Jan 01 14:10:53 2011 +0100
@@ -186,7 +186,7 @@
 	sieve_runtime_trace(renv, SIEVE_TRLVL_TESTS, "header test");
 
 	/* Create header stringlist */
-	value_list = sieve_message_header_stringlist_create(renv, hdr_list);
+	value_list = sieve_message_header_stringlist_create(renv, hdr_list, TRUE);
 
 	/* Perform match */
 	if ( (match=sieve_match(renv, &mcht, &cmp, value_list, key_list, &ret)) < 0 )
diff -r 67d2240966ec -r 99f8dc1e246a tests/test-address.svtest
--- a/tests/test-address.svtest	Tue Dec 07 00:05:50 2010 +0100
+++ b/tests/test-address.svtest	Sat Jan 01 14:10:53 2011 +0100
@@ -370,3 +370,27 @@
 		test_fail "invalid default address part (2)";
 	}
 }
+
+/*
+ * TEST: Erroneous mime encoding
+ */
+
+test_set "message" text:
+From: "William Wallace <william at scotsmen.ex>"
+To: "=?UTF-8?B?IkR1bWIgTWFpbGVyIg==?="
+	<horde at lists.scotsmen.ex>
+Subject: Test
+
+Frop!
+.
+;
+
+
+test "Erroneous mime encoding" {
+        # Relevant sieve rule:
+
+        if not address :is ["To","CC"] ["horde at lists.scotsmen.ex","archers at lists.scotsmen.ex"] {
+                test_fail "Failed to match improperly encoded address headers";
+        }
+}
+


More information about the dovecot-cvs mailing list