[PATCH v2] legacy-display: accept text/plain legacy display parts

Subject: [PATCH v2] legacy-display: accept text/plain legacy display parts

Date: Tue, 24 Dec 2019 17:05:44 -0500

To: Notmuch Mail


From: Daniel Kahn Gillmor

Makes it clear that the "Legacy Display" part of an encrypted message
with protected headers can (and indeed, should) be of content-type
text/plain, though some clients still generate the Legacy Display part
as content-type text/rfc822-headers.  Notmuch should recognize the
part whichever of the two content-types it uses.

See also discussion in
https://github.com/autocrypt/protected-headers/issues/23 for why the
community of implementers is moving in the direction of text/plain.

Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
 util/repair.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/util/repair.c b/util/repair.c
index 9fba97b7..f5cbb14b 100644
--- a/util/repair.c
+++ b/util/repair.c
@@ -49,8 +49,14 @@ _notmuch_crypto_payload_has_legacy_display (GMimeObject *payload)
     if (g_mime_multipart_get_count (mpayload) != 2)
 	return false;
     first = g_mime_multipart_get_part (mpayload, 0);
-    if (! g_mime_content_type_is_type (g_mime_object_get_content_type (first),
-				       "text", "rfc822-headers"))
+    /* Early implementations that generated "Legacy Display" parts used
+       Content-Type: text/rfc822-headers, but text/plain is more widely
+       rendered, so it is now the standard choice.  We accept either as a
+       Legacy Display part. */
+    if (! (g_mime_content_type_is_type (g_mime_object_get_content_type (first),
+					"text", "plain") ||
+	   g_mime_content_type_is_type (g_mime_object_get_content_type (first),
+					"text", "rfc822-headers")))
 	return false;
     protected_header_parameter = g_mime_object_get_content_type_parameter (first, "protected-headers");
     if ((! protected_header_parameter) || strcmp (protected_header_parameter, "v1"))

notmuch mailing list