Both RFC mailbox address names and mailboxes/local-names may by RFC 2047
be Quoted-Printable or Base64 encoded. This patch ensures these parts are
correctly decoded when parsing a RFC 822 message, so that they are
displayed to the user in human-readable form.
Part 2 of Mailsploit mitigation.
* src/engine/rfc822/rfc822-message.vala (Message): Since GMime.Message's
convenience properties for accessing header values such as senders,
recipients, etc. in string form are presented as human-readable, not
RFC822 compliant strings, we can't re-parse them for use by this class
when it is being constructed from a GMime-based source. Instead,
iterate over all headers to get the raw values and parse those we are
interested in instead. Add unit tests.
* src/engine/rfc822/rfc822-mailbox-address.vala (BaseObject): Add gmime
constructor so we can handle construction and decoding from a GMime
InternetAddressMailbox object in a consistent way. Ensure both names
are decoded correctly, and mailboxes are decoded at all, from both
GMime and IMAP sources. If a GMime source's address has no @-symbol,
try to decode the whole thing first it in case the whole address is
encoded. Add unit tests.
* src/engine/rfc822/rfc822-mailbox-addresses.vala (MailboxAddresses):
Add append method and handle group addresses here instead of in Message
to simplify updated Message implementation.
* src/engine/rfc822/rfc822-message-data.vala (MessageData): Add append
method to simplify updated Message implementation.
While message bodies are always sent as UTF-8, non ASCII/ISO-8859-1
headers were being encoded using GMime's default heuristics. This
uses some less-well-supported charsets and causing some rendering
issues in other less tolerant client.
Since we assume UTF-8 support for the body, assume it for headers as
well.
* src/engine/rfc822/rfc822.vala (Geary.RFC822.init): Set GMime user
charsets to UTF-8.
* bindings/vapi/gmime-2.6.vapi (GMime): Fix binding for
g_mime_set_user_charsets.
Discovered a few binding problems while working on another issue,
in particular gmime_parser_construct_message()'s return object
not being freed, which can hold an entire message (attachments and
all) in memory.
We've had numerous bugs due to improper MIME comparisons and dealing
with Content-Type and Content-Disposition (or their lack of presence
in a message). Now the Engine offers MIME classes that better deal
with these issues without exporting the GMime structures, which
are not as easy to manage and don't offer some of the things that
have bitten us in the past (such as case-insensitive comparisons).
Squashed commit of the following:
commit 6e066374da45dd602ee1ca3c9bc5f77b9411b6f4
Author: Eric Gregory <eric@yorba.org>
Date: Tue Jan 15 11:36:32 2013 -0800
Closes#6209 Precise support for GIR WebKitGTK binding. Rolls back to deprecated context menu in composer for compatibility with WebKitGTK 1.8