From e96f0707de039d8a58fb6b3d4037a345ae6f31cc Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Sun, 17 Jan 2021 23:23:15 +0100 Subject: mshow: show last part of multipart/mixed when none matched This is in conformance with RFC 1341. --- man/mshow.1 | 2 +- mshow.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/man/mshow.1 b/man/mshow.1 index 9126787..a19db2a 100644 --- a/man/mshow.1 +++ b/man/mshow.1 @@ -56,7 +56,7 @@ in the order given, when rendering .Sq Li "multipart/alternative" parts. -If no MIME type matches, the first MIME part will be rendered. +If no MIME type matches, the last MIME part will be rendered. .Pp When .Ar mimetypes diff --git a/mshow.c b/mshow.c index f66e7b2..5ab309a 100644 --- a/mshow.c +++ b/mshow.c @@ -336,7 +336,7 @@ nofilter: static void choose_alternative(struct message *msg, int depth) { - int n = 1; + int n = 0; int m = 0; char *p = Aflag + strlen(Aflag); @@ -363,6 +363,13 @@ choose_alternative(struct message *msg, int depth) } blaze822_free(imsg); + if (n == 0) { + // No part matched, use last part as per RFC1341 7.2.3 + // "In general, choosing the best type means displaying + // only the LAST part that can be displayed." + n = m; + } + imsg = 0; while (blaze822_multipart(msg, &imsg)) if (--n == 0) -- cgit 1.4.1