X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=Debbugs%2FCGI%2FBugreport.pm;h=1121516fe056d2f3ea1e521b50d6d6538c88fb84;hb=3ca3d92a6dd4a37cb69d801d80be95379a044d40;hp=0d7658e574f9ee8369c0bbc07c133e0795512563;hpb=ddf68e12d5f2988f0bee4ddd5bec46967056a045;p=debbugs.git diff --git a/Debbugs/CGI/Bugreport.pm b/Debbugs/CGI/Bugreport.pm index 0d7658e..1121516 100644 --- a/Debbugs/CGI/Bugreport.pm +++ b/Debbugs/CGI/Bugreport.pm @@ -39,6 +39,7 @@ use Debbugs::CGI qw(:url :html :util); use Debbugs::Common qw(globify_scalar english_join); use Debbugs::UTF8; use Debbugs::Config qw(:config); +use Debbugs::Log qw(:read); use POSIX qw(strftime); use Encode qw(decode_utf8 encode_utf8); use URI::Escape qw(uri_escape_utf8); @@ -313,22 +314,28 @@ appropriate. =cut sub handle_email_message{ - my ($email,%param) = @_; + my ($record,%param) = @_; my $output; my $output_fh = globify_scalar(\$output); my $entity; my $tempdir; - if (not blessed $email) { + if (not blessed $record) { my $parser = MIME::Parser->new(); # Because we are using memory, not tempfiles, there's no need to # clean up here like in Debbugs::MIME # this will be cleaned up once it goes out of scope $tempdir = File::Temp->newdir(); $parser->output_under($tempdir->dirname()); - $entity = $parser->parse_data( $email); + if ($record->{inner_file}) { + $entity = $parser->parse($record->{fh}) or + die "Unable to parse entity"; + } else { + $entity = $parser->parse_data($record->{text}) or + die "Unable to parse entity"; + } } else { - $entity = $email + $entity = $record; } my @attachments = (); my $raw_output = @@ -366,7 +373,7 @@ sub handle_record{ local $_ = $record->{type}; if (/html/) { # $record->{text} is not in perl's internal encoding; convert it - my $text = decode_rfc1522(decode_utf8($record->{text})); + my $text = decode_rfc1522(decode_utf8(record_text($record))); my ($time) = $text =~ //; my $class = $text =~ /^(?:Acknowledgement|Reply|Information|Report|Notification)/m ? 'infmessage':'msgreceived'; $output .= $text; @@ -412,8 +419,8 @@ sub handle_record{ $output = qq(

\n\n) . $output . "
\n"; } elsif (/recips/) { - my ($msg_id) = $record->{text} =~ /^Message-Id:\s+<(.+)>/im; - if (defined $msg_id and exists $$seen_msg_ids{$msg_id}) { + my ($msg_id) = record_regex($record,qr/^Message-Id:\s+<(.+)>/i); + if (defined $msg_id and exists $$seen_msg_ids{$msg_id}) { return (); } elsif (defined $msg_id) { @@ -421,7 +428,7 @@ sub handle_record{ } $output .= qq(

\n); $output .= 'View this message in rfc822 format

'; - $output .= handle_email_message($record->{text}, + $output .= handle_email_message($record, ref => $bug_number, msg_num => $msg_number, %param, @@ -431,7 +438,7 @@ sub handle_record{ # Do nothing } elsif (/incoming-recv/) { - my ($msg_id) = $record->{text} =~ /^Message-Id:\s+<(.+)>/im; + my ($msg_id) = record_regex($record,qr/^Message-Id:\s+<(.+)>/i); if (defined $msg_id and exists $$seen_msg_ids{$msg_id}) { return (); } @@ -439,7 +446,7 @@ sub handle_record{ $$seen_msg_ids{$msg_id} = 1; } # Incomming Mail Message - my ($received,$hostname) = $record->{text} =~ m/Received: \(at (\S+)\) by (\S+)\;/; + my ($received,$hostname) = record_regex($record,qr/Received: \(at (\S+)\) by (\S+)\;/o); $output .= qq|

Message #$msg_number received at |. html_escape("$received\@$hostname") . q| (full text'. @@ -454,7 +461,12 @@ sub handle_record{ # this will be cleaned up once it goes out of scope my $tempdir = File::Temp->newdir(); $parser->output_under($tempdir->dirname()); - my $entity = $parser->parse_data($record->{text}); + my $entity; + if ($record->{inner_file}) { + $entity = $parser->parse($record->{fh}); + } else { + $entity = $parser->parse_data($record->{text}); + } my $r_l = reply_headers($entity); $output .= q(