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