From: Don Armstrong Date: Tue, 5 Aug 2008 15:41:31 +0000 (-0700) Subject: * Support attachments properly in display_entity X-Git-Tag: release/2.6.0~488^2~19 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=800dca1b0dc438d17d66c1663695e9203eaf7bde;p=debbugs.git * Support attachments properly in display_entity * Fix a few new uses --- diff --git a/Debbugs/CGI/Bugreport.pm b/Debbugs/CGI/Bugreport.pm index 85dc3b98..cb1f48cf 100644 --- a/Debbugs/CGI/Bugreport.pm +++ b/Debbugs/CGI/Bugreport.pm @@ -34,6 +34,7 @@ use IO::Scalar; use Params::Validate qw(validate_with :types); use Debbugs::MIME qw(convert_to_utf8 decode_rfc1522 create_mime_message); use Debbugs::CGI qw(:url :html :util); +use Debbugs::Common qw(globify_scalar); use POSIX qw(strftime); BEGIN{ @@ -110,15 +111,11 @@ sub display_entity { } ); + $param{output} = globify_scalar($param{output}); my $entity = $param{entity}; my $ref = $param{bug_num}; my $top = $param{outer}; my $xmessage = $param{msg_num}; - if (defined ref($param{output}) and - ref($param{output}) eq 'SCALAR' and - not UNIVERSAL::isa($param{output},'GLOB')) { - $param{output} = IO::Scalar->new($param{output}); - } my $attachments = $param{attachments}; my $head = $entity->head; @@ -129,7 +126,9 @@ sub display_entity { $filename = '' unless defined $filename; $filename = decode_rfc1522($filename); - if ($top and not $param{terse}) { + if ($param{outer} and + not $param{terse} and + not exists $param{att}) { my $header = $entity->head; print {$param{output}} "
\n";
 	 if ($param{trim_headers}) {
@@ -146,17 +145,12 @@ sub display_entity {
 	 print {$param{output}} "
\n"; } - unless (($top and $type =~ m[^text(?:/plain)?(?:;|$)]) or - ($type =~ m[^multipart/])) { - push @$attachments, $entity; - my @dlargs = ($ref, msg=>$xmessage, att=>$#$attachments); - push @dlargs, (filename=>$filename) if $filename ne ''; - my $printname = $filename; - $printname = 'Message part ' . ($#$attachments + 1) if $filename eq ''; - print {$param{output}} '
[$printname } .
-		  "($type, $disposition)]
\n"; - - if (exists $param{msg} and exists $param{att} and + if (not (($param{outer} and $type =~ m{^text(?:/plain)?(?:;|$)}) + or $type =~ m{^multipart/} + )) { + push @$attachments, $param{entity}; + # output this attachment + if (exists $param{att} and $param{att} == $#$attachments) { my $head = $entity->head; chomp(my $type = $entity->effective_type); @@ -173,12 +167,20 @@ sub display_entity { } print {$param{output}} "\n"; my $decoder = MIME::Decoder->new($head->mime_encoding); - $decoder->decode(new IO::Scalar(\$body), \*STDOUT); - exit(0); + $decoder->decode(IO::Scalar->new(\$body), $param{output}); + return; + } + elsif (not exists $param{att}) { + my @dlargs = ($ref, msg=>$xmessage, att=>$#$attachments); + push @dlargs, (filename=>$filename) if $filename ne ''; + my $printname = $filename; + $printname = 'Message part ' . ($#$attachments + 1) if $filename eq ''; + print {$param{output}} '
[$printname } .
+		  "($type, $disposition)]
\n"; } } - return if not $top and $disposition eq 'attachment' and not defined($param{att}); + return if not $param{outer} and $disposition eq 'attachment' and not exists $param{att}; return unless ($type =~ m[^text/?] and $type !~ m[^text/(?:html|enriched)(?:;|$)]) or $type =~ m[^application/pgp(?:;|$)] or @@ -195,13 +197,15 @@ sub display_entity { attachments => $attachments, terse => $param{terse}, exists $param{msg}?(msg=>$param{msg}):(), - exists $param{attachment}?(attachment=>$param{attachment}):(), + exists $param{att}?(att=>$param{att}):(), ); - print {$param{output}} "\n"; + # print {$param{output}} "\n"; } } elsif ($entity->parts) { # We must be dealing with a nested message. - print {$param{output}} "
\n"; + if (not exists $param{att}) { + print {$param{output}} "
\n"; + } my @parts = $entity->parts; foreach my $part (@parts) { display_entity(entity => $part, @@ -212,11 +216,13 @@ sub display_entity { attachments => $attachments, terse => $param{terse}, exists $param{msg}?(msg=>$param{msg}):(), - exists $param{attachment}?(attachment=>$param{attachment}):(), + exists $param{att}?(att=>$param{att}):(), ); - print {$param{output}} "\n"; + # print {$param{output}} "\n"; } - print {$param{output}} "
\n"; + if (not exists $param{att}) { + print {$param{output}} "
\n"; + } } elsif (not $param{terse}) { my $content_type = $entity->head->get('Content-Type:') || "text/html"; my ($charset) = $content_type =~ m/charset\s*=\s*\"?([\w-]+)\"?/i; @@ -244,7 +250,10 @@ sub display_entity { qq(">$1) }ge; $temp;]gxie; - print {$param{output}} qq(
$body
\n); + + if (not exists $param{att}) { + print {$param{output}} qq(
$body
\n); + } } } @@ -266,7 +275,7 @@ sub handle_email_message{ my ($email,%param) = @_; my $output = ''; - my $parser = new MIME::Parser; + my $parser = MIME::Parser->new(); # Because we are using memory, not tempfiles, there's no need to # clean up here like in Debbugs::MIME $parser->tmp_to_core(1); @@ -281,7 +290,7 @@ sub handle_email_message{ attachments => \@attachments, terse => $param{terse}, exists $param{msg}?(msg=>$param{msg}):(), - exists $param{att}?(attachment=>$param{att}):(), + exists $param{att}?(att=>$param{att}):(), ); return $output;