http://bugzilla.ximian.com/show_bug.cgi?id=69145 this is a bug that's been sitting in my inbox for a week or 2 now that I've been wrestling with fixing when I get bored hacking on imap4. Jeff -- Jeffrey Stedfast Evolution Hacker - Novell, Inc. fejj ximian com - www.novell.com
? 24026.patch ? 62136.patch ? 62771-camel.patch ? 63504.patch ? 65828.patch ? 69145.patch ? body ? body.c ? body.txt ? body2.txt ? build.patch ? charset-map.c ? charset-map.diff ? class.sh ? cmsutil.c ? courier-sucks.patch ? css.c ? date.patch ? diff ? flags ? foo ? foo.txt ? foo2.txt ? getaddrinfo-ex.patch ? gw-body.txt ? iso ? iso.c ? lang.patch ? namespace.sh ? smime ? toplevel-msg-part.patch ? providers/imap4/camel-imap4-stream-test.c ? providers/imap4/reconnect.patch ? tests/data/camel-mime-tests.tar.gz Index: ChangeLog =================================================================== RCS file: /cvs/gnome/evolution/camel/ChangeLog,v retrieving revision 1.2296 diff -u -r1.2296 ChangeLog --- ChangeLog 4 Nov 2004 20:52:49 -0000 1.2296 +++ ChangeLog 5 Nov 2004 17:51:15 -0000 @@ -1,3 +1,9 @@ +2004-11-05 Jeffrey Stedfast <fejj novell com> + + * providers/imap/camel-imap-folder.c (get_content): Changed the + logic for when the parent part was a message as well. Fixes bug + #69145. + 2004-11-04 Jeffrey Stedfast <fejj novell com> * providers/imap4/camel-imap4-engine.c: Added much in-line Index: providers/imap/camel-imap-folder.c =================================================================== RCS file: /cvs/gnome/evolution/camel/providers/imap/camel-imap-folder.c,v retrieving revision 1.338 diff -u -r1.338 camel-imap-folder.c --- providers/imap/camel-imap-folder.c 20 Sep 2004 05:59:53 -0000 1.338 +++ providers/imap/camel-imap-folder.c 5 Nov 2004 17:51:16 -0000 @@ -1722,7 +1722,8 @@ { CamelDataWrapper *content = NULL; CamelStream *stream; - char *part_spec; + char *part_spec, *spec; + int ret; part_spec = content_info_get_part_spec (ci); @@ -1731,8 +1732,6 @@ /* There are three cases: multipart/signed, multipart, message/rfc822, and "other" */ if (camel_content_type_is (ci->type, "multipart", "signed")) { CamelMultipartSigned *body_mp; - char *spec; - int ret; /* Note: because we get the content parts uninterpreted anyway, we could potentially just use the normalmultipart code, except that multipart/signed wont let you yet! */ @@ -1788,8 +1787,6 @@ sprintf (child_spec + speclen, "%d.MIME", num++); stream = camel_imap_folder_fetch_data (imap_folder, uid, child_spec, FALSE, ex); if (stream) { - int ret; - part = camel_mime_part_new (); ret = camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (part), stream); camel_object_unref (CAMEL_OBJECT (stream)); @@ -1842,13 +1839,28 @@ return (CamelDataWrapper *) body_mp; } else if (camel_content_type_is (ci->type, "message", "rfc822")) { - content = (CamelDataWrapper *) get_message (imap_folder, uid, part_spec, ci->childs, ex); + CamelMimeMessage *message; + + if (frommsg) { + spec = *part_spec ? part_spec : "1"; + if (!(stream = camel_imap_folder_fetch_data (imap_folder, uid, spec, FALSE, ex))) + return NULL; + + content = (CamelDataWrapper *) message = camel_mime_message_new (); + ret = camel_data_wrapper_construct_from_stream (CAMEL_DATA_WRAPPER (message), stream); + camel_object_unref (stream); + if (ret == -1) { + camel_object_unref (message); + return NULL; + } + } else { + content = (CamelDataWrapper *) get_message (imap_folder, uid, part_spec, ci->childs, ex); + } g_free (part_spec); return content; } else { CamelTransferEncoding enc; - char *spec; - + spec = g_alloca(strlen(part_spec) + 6); if (frommsg) sprintf(spec, part_spec[0] ? "%s.TEXT" : "1.TEXT", part_spec);
Attachment:
smime.p7s
Description: S/MIME cryptographic signature