aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2021-01-17 23:23:15 +0100
committerLeah Neukirchen <leah@vuxu.org>2021-01-17 23:23:52 +0100
commite96f0707de039d8a58fb6b3d4037a345ae6f31cc (patch)
tree0bb1a1e3dab125b03bd4a976257569637d893678
parent318ac214f1de06b0ee69106a36368b2d3b2ac902 (diff)
downloadmblaze-e96f0707de039d8a58fb6b3d4037a345ae6f31cc.tar.gz
mblaze-e96f0707de039d8a58fb6b3d4037a345ae6f31cc.tar.xz
mblaze-e96f0707de039d8a58fb6b3d4037a345ae6f31cc.zip
mshow: show last part of multipart/mixed when none matched
This is in conformance with RFC 1341.
-rw-r--r--man/mshow.12
-rw-r--r--mshow.c9
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)