dovecot-2.2: lib-imap: Fixed Content-Language parsing from BODYS...

dovecot at dovecot.org dovecot at dovecot.org
Sat Sep 15 19:12:20 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.2/rev/9935621836c8
changeset: 15062:9935621836c8
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Sep 15 19:12:04 2012 +0300
description:
lib-imap: Fixed Content-Language parsing from BODYSTRUCTURE

diffstat:

 src/lib-imap/imap-bodystructure.c      |  22 +++++++++++-----------
 src/lib-imap/test-imap-bodystructure.c |   4 ++--
 2 files changed, 13 insertions(+), 13 deletions(-)

diffs (94 lines):

diff -r 108b28e864c4 -r 9935621836c8 src/lib-imap/imap-bodystructure.c
--- a/src/lib-imap/imap-bodystructure.c	Sat Sep 15 19:08:55 2012 +0300
+++ b/src/lib-imap/imap-bodystructure.c	Sat Sep 15 19:12:04 2012 +0300
@@ -567,11 +567,7 @@
 	while (!IMAP_ARG_IS_EOL(args)) {
 		if (!str_append_nstring(str, &args[0]))
 			return -1;
-		str_append_c(str, ' ');
-		if (!str_append_nstring(str, &args[1]))
-			return -1;
-
-		args += 2;
+		args++;
 		if (IMAP_ARG_IS_EOL(args))
 			break;
 		str_append_c(str, ' ');
@@ -580,15 +576,19 @@
 }
 
 static int imap_write_params(const struct imap_arg *arg, pool_t pool,
-			     string_t *tmpstr, const char **value_r)
+			     string_t *tmpstr, unsigned int divisible,
+			     const char **value_r)
 {
 	const struct imap_arg *list_args;
+	unsigned int list_count;
 
 	if (arg->type == IMAP_ARG_NIL) {
 		*value_r = NULL;
 		return 0;
 	}
-	if (!imap_arg_get_list(arg, &list_args))
+	if (!imap_arg_get_list_full(arg, &list_args, &list_count))
+		return -1;
+	if ((list_count % divisible) != 0)
 		return -1;
 
 	if (imap_write_nstring_list(list_args, tmpstr) < 0)
@@ -636,14 +636,14 @@
 			*error_r = "Invalid content-disposition";
 			return -1;
 		}
-		if (imap_write_params(list_args, pool, tmpstr,
+		if (imap_write_params(list_args, pool, tmpstr, 2,
 				      &data->content_disposition_params) < 0) {
 			*error_r = "Invalid content-disposition params";
 			return -1;
 		}
 		args++;
 	}
-	if (imap_write_params(args++, pool, tmpstr,
+	if (imap_write_params(args++, pool, tmpstr, 1,
 			      &data->content_language) < 0) {
 		*error_r = "Invalid content-language";
 		return -1;
@@ -703,7 +703,7 @@
 			*error_r = "Invalid multipart content-type";
 			return -1;
 		}
-		if (imap_write_params(args++, pool, tmpstr,
+		if (imap_write_params(args++, pool, tmpstr, 2,
 				      &data->content_type_params) < 0) {
 			*error_r = "Invalid content params";
 			return -1;
@@ -741,7 +741,7 @@
 	}
 
 	/* ("content type param key" "value" ...) | NIL */
-	if (imap_write_params(args++, pool, tmpstr,
+	if (imap_write_params(args++, pool, tmpstr, 2,
 			      &data->content_type_params) < 0) {
 		*error_r = "Invalid content params";
 		return -1;
diff -r 108b28e864c4 -r 9935621836c8 src/lib-imap/test-imap-bodystructure.c
--- a/src/lib-imap/test-imap-bodystructure.c	Sat Sep 15 19:08:55 2012 +0300
+++ b/src/lib-imap/test-imap-bodystructure.c	Sat Sep 15 19:12:04 2012 +0300
@@ -22,7 +22,7 @@
 "Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==\n"
 "Content-Disposition: inline; foo=bar\n"
 "Content-Description: hellodescription\n"
-"Content-Language: en, fi\n"
+"Content-Language: en, fi, se\n"
 "Content-Location: http://example.com/test.txt\n"
 "\n"
 "hello\n"
@@ -55,7 +55,7 @@
 
 static const char testmsg_bodystructure[] =
 "(\"text\" \"x-myown\" (\"charset\" \"us-ascii\" \"foo\" {13}\r\n"
-"quoted\"string) \"<foo at example.com>\" \"hellodescription\" \"7bit\" 7 1 \"Q2hlY2sgSW50ZWdyaXR5IQ==\" (\"inline\" (\"foo\" \"bar\")) (\"en\" \"fi\") \"http://example.com/test.txt\")(\"message\" \"rfc822\" NIL NIL NIL \"7bit\" 331 (\"Sun, 12 Aug 2012 12:34:56 +0300\" \"submsg\" ((NIL NIL \"sub\" \"domain.org\")) ((NIL NIL \"sub\" \"domain.org\")) ((NIL NIL \"sub\" \"domain.org\")) NIL NIL NIL NIL NIL) ((\"text\" \"html\" (\"charset\" \"us-ascii\") NIL NIL \"8bit\" 20 1 NIL NIL NIL NIL)(\"text\" \"plain\" (\"charset\" \"us-ascii\") NIL NIL \"7bit\" 21 1 NIL NIL NIL NIL) \"alternative\" (\"boundary\" \"sub1\") NIL NIL NIL) 19 NIL NIL NIL NIL) \"mixed\" (\"boundary\" \"foo bar\") NIL NIL NIL";
+"quoted\"string) \"<foo at example.com>\" \"hellodescription\" \"7bit\" 7 1 \"Q2hlY2sgSW50ZWdyaXR5IQ==\" (\"inline\" (\"foo\" \"bar\")) (\"en\" \"fi\" \"se\") \"http://example.com/test.txt\")(\"message\" \"rfc822\" NIL NIL NIL \"7bit\" 331 (\"Sun, 12 Aug 2012 12:34:56 +0300\" \"submsg\" ((NIL NIL \"sub\" \"domain.org\")) ((NIL NIL \"sub\" \"domain.org\")) ((NIL NIL \"sub\" \"domain.org\")) NIL NIL NIL NIL NIL) ((\"text\" \"html\" (\"charset\" \"us-ascii\") NIL NIL \"8bit\" 20 1 NIL NIL NIL NIL)(\"text\" \"plain\" (\"charset\" \"us-ascii\") NIL NIL \"7bit\" 21 1 NIL NIL NIL NIL) \"alternative\" (\"boundary\" \"sub1\") NIL NIL NIL) 19 NIL NIL NIL NIL) \"mixed\" (\"boundary\" \"foo bar\") NIL NIL NIL";
 
 static const char testmsg_body[] =
 "(\"text\" \"x-myown\" (\"charset\" \"us-ascii\" \"foo\" {13}\r\n"


More information about the dovecot-cvs mailing list