http://bugzilla.ximian.com/show_bug.cgi?id=62771 2-part patch. implemented another decode function (maybe it can be merged into header_decode_text?) that decodes structured header bodies that can contain comments also had to fix the mailer code to actually decode the User-Agent/X- Mailer header values using this new function (it didn't even try to decode before) Jeff -- Jeffrey Stedfast Evolution Hacker - Novell, Inc. fejj ximian com - www.novell.com
? 24026.patch
? 62136.patch
? 62771-camel.patch
? body
? body.c
? body.txt
? body2.txt
? build.patch
? charset-map.c
? charset-map.diff
? class.sh
? cmsutil.c
? date.patch
? flags
? foo
? foo.txt
? foo2.txt
? gw-body.txt
? iso
? iso.c
? lang.patch
? namespace.sh
? smime
? providers/imap4/reconnect.patch
? tests/data/camel-mime-tests.tar.gz
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/camel/ChangeLog,v
retrieving revision 1.2237
diff -u -r1.2237 ChangeLog
--- ChangeLog 6 Aug 2004 19:24:03 -0000 1.2237
+++ ChangeLog 10 Aug 2004 19:09:10 -0000
@@ -1,3 +1,11 @@
+2004-08-10 Jeffrey Stedfast <fejj novell com>
+
+ Fix for bug #62771
+
+ * camel-mime-utils.c (header_decode_ctext): New function to decode
+ ctext field bodies.
+ (camel_header_decode_ctext): public interface for above.
+
2004-08-06 Jeffrey Stedfast <fejj novell com>
* providers/imap4/camel-imap4-summary.c (untagged_fetch_all): Call
Index: camel-mime-utils.c
===================================================================
RCS file: /cvs/gnome/evolution/camel/camel-mime-utils.c,v
retrieving revision 1.212
diff -u -r1.212 camel-mime-utils.c
--- camel-mime-utils.c 30 Jul 2004 15:30:38 -0000 1.212
+++ camel-mime-utils.c 10 Aug 2004 19:09:11 -0000
@@ -1118,6 +1118,68 @@
}
+static char *
+header_decode_ctext (const char *in, size_t inlen, const char *default_charset)
+{
+ const char *inptr, *inend, *start, *chunk, *locale_charset;
+ char *dword = NULL;
+ GString *out;
+
+ locale_charset = e_iconv_locale_charset ();
+
+ out = g_string_new ("");
+ inptr = in;
+ inend = inptr + inlen;
+ chunk = NULL;
+
+ while (inptr < inend) {
+ start = inptr;
+ while (inptr < inend && !camel_mime_is_atom (*inptr))
+ inptr++;
+
+ if (inptr == inend) {
+ g_string_append_len (out, start, inptr - start);
+ break;
+ } else if (dword == NULL) {
+ g_string_append_len (out, start, inptr - start);
+ } else {
+ chunk = start;
+ }
+
+ start = inptr;
+ while (inptr < inend && camel_mime_is_atom (*inptr))
+ inptr++;
+
+ dword = rfc2047_decode_word (start, inptr - start);
+ if (dword) {
+ g_string_append (out, dword);
+ g_free (dword);
+ } else {
+ if (!chunk)
+ chunk = start;
+
+ if ((default_charset == NULL || !append_8bit (out, chunk, inptr - chunk, default_charset))
+ && (locale_charset == NULL || !append_8bit (out, chunk, inptr - chunk, locale_charset)))
+ append_latin1 (out, chunk, inptr - chunk);
+ }
+
+ chunk = NULL;
+ }
+
+ dword = out->str;
+ g_string_free (out, FALSE);
+
+ return dword;
+}
+
+char *
+camel_header_decode_ctext (const char *in, const char *default_charset)
+{
+ if (in == NULL)
+ return NULL;
+ return header_decode_ctext (in, strlen (in), default_charset);
+}
+
/* decodes a simple text, rfc822 + rfc2047 */
static char *
header_decode_text (const char *in, size_t inlen, const char *default_charset)
Index: camel-mime-utils.h
===================================================================
RCS file: /cvs/gnome/evolution/camel/camel-mime-utils.h,v
retrieving revision 1.56
diff -u -r1.56 camel-mime-utils.h
--- camel-mime-utils.h 18 Jun 2004 20:07:09 -0000 1.56
+++ camel-mime-utils.h 10 Aug 2004 19:09:11 -0000
@@ -194,6 +194,9 @@
char *camel_header_decode_string (const char *in, const char *default_charset);
char *camel_header_encode_string (const unsigned char *in);
+/* decode ctext */
+char *camel_header_decode_ctext (const char *in, const char *default_charset);
+
/* encode a phrase, like the real name of an address */
char *camel_header_encode_phrase (const unsigned char *in);
? 55303-2.patch
? 55303.patch
? 62377.patch
? 62771-mailer.patch
? oops.patch
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/mail/ChangeLog,v
retrieving revision 1.3430
diff -u -r1.3430 ChangeLog
--- ChangeLog 10 Aug 2004 19:10:06 -0000 1.3430
+++ ChangeLog 10 Aug 2004 19:11:07 -0000
@@ -1,3 +1,12 @@
+2004-08-10 Jeffrey Stedfast <fejj novell com>
+
+ Partial fix for bug #62771
+
+ * em-format-quote.c (emfq_format_header): Same.
+
+ * em-format-html.c (efh_format_header): Decode the
+ X-Mailer/User-Agent headers.
+
2004-08-06 Jeffrey Stedfast <fejj novell com>
* em-folder-tree-model.c (em_folder_tree_model_get_selected):
Index: em-format-html.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/em-format-html.c,v
retrieving revision 1.62
diff -u -r1.62 em-format-html.c
--- em-format-html.c 10 Jul 2004 01:31:04 -0000 1.62
+++ em-format-html.c 10 Aug 2004 19:11:07 -0000
@@ -1552,7 +1552,7 @@
} else if (!strcmp(name, "x-evolution-mailer")) {
/* pseudo-header */
label = _("Mailer");
- txt = header->value;
+ txt = value = camel_header_decode_ctext (header->value, charset);
flags |= EM_FORMAT_HEADER_BOLD;
} else if (!strcmp(name, "date") || !strcmp(name, "resent-date")) {
int msg_offset, local_tz;
Index: em-format-quote.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/em-format-quote.c,v
retrieving revision 1.12
diff -u -r1.12 em-format-quote.c
--- em-format-quote.c 10 Jul 2004 01:31:04 -0000 1.12
+++ em-format-quote.c 10 Aug 2004 19:11:07 -0000
@@ -309,6 +309,8 @@
if (!(txt = camel_medium_get_header (part, "user-agent")))
return;
+ txt = value = camel_header_decode_ctext (txt, charset);
+
label = _("Mailer");
flags |= EM_FORMAT_HEADER_BOLD;
} else if (!strcmp (name, "date") || !strcmp (name, "resent-date")) {
Attachment:
smime.p7s
Description: S/MIME cryptographic signature