]> Sergey Matveev's repositories - public-inbox.git/commitdiff
view: do not offer links to 0-byte multipart attachments
authorEric Wong <e@yhbt.net>
Mon, 25 May 2020 08:21:37 +0000 (08:21 +0000)
committerEric Wong <e@yhbt.net>
Tue, 26 May 2020 10:54:36 +0000 (10:54 +0000)
Offering links to download 0-byte files is useless.  We could
waste memory by preserving $eml->{bdy} during iteration, but
offering attachments of type "multipart" is not very useful,
as users are usually interested in decoded attachments or
the entire raw message.

Fixes: e60231148eb604a3 ("descend into message/(rfc822|news|global) parts")
lib/PublicInbox/View.pm
t/psgi_attach.t

index 93a5b32915506338bc6bfc28679765bc6e37765a..a05ac4142f29385abeb9b741eb2911cc6cb17fd4 100644 (file)
@@ -499,6 +499,11 @@ sub submsg_hdr ($$) {
 sub attach_link ($$$$;$) {
        my ($ctx, $ct, $p, $fn, $err) = @_;
        my ($part, $depth, $idx) = @$p;
+
+       # Eml iteration clobbers multipart ->{bdy}, so do not offer
+       # downloads for 0-byte multipart attachments
+       return unless $part->{bdy};
+
        my $nl = $idx eq '1' ? '' : "\n"; # like join("\n", ...)
        my $size = bytes::length($part->body);
 
index c6f8072ff9a223c5fbd351957cbe3e6b1bf168d6..9a734f813fae590b960970aed9004da7ca8eebbf 100644 (file)
@@ -73,6 +73,8 @@ $im->init_bare;
                my $mid = '20200418222508.GA13918@dcvr';
                my $irt = '20200418222020.GA2745@dcvr';
                $res = $cb->(GET("/test/$mid/"));
+               unlike($res->content, qr! multipart/mixed, Size: 0 bytes!,
+                       '0-byte download not offered');
                like($res->content, qr/\bhref="2-embed2x\.eml"/s,
                        'href to message/rfc822 attachment visible');
                like($res->content, qr/\bhref="2\.1\.2-test\.eml"/s,