X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FCGI%2FBugreport.pm;h=9ca67ed4ac6dbf243f749ac931d7799d92c8228a;hb=1f81df46999fc3699ce73aeba95af5095a5a413a;hp=f2ae9ac410c6ed98955d6016f1f6d76e6fbc879e;hpb=1fc2d1468742f5478aa2592cc31a450c2ea7f141;p=debbugs.git diff --git a/Debbugs/CGI/Bugreport.pm b/Debbugs/CGI/Bugreport.pm index f2ae9ac..9ca67ed 100644 --- a/Debbugs/CGI/Bugreport.pm +++ b/Debbugs/CGI/Bugreport.pm @@ -28,20 +28,23 @@ None known. use warnings; use strict; use vars qw($VERSION $DEBUG %EXPORT_TAGS @EXPORT_OK @EXPORT); -use base qw(Exporter); +use Exporter qw(import); use IO::Scalar; use Params::Validate qw(validate_with :types); use Digest::MD5 qw(md5_hex); -use Debbugs::Mail qw(get_addresses); +use Debbugs::Mail qw(get_addresses :reply); use Debbugs::MIME qw(decode_rfc1522 create_mime_message); 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); +use URI::Escape qw(uri_escape_utf8); +use Scalar::Util qw(blessed); +use File::Temp; BEGIN{ ($VERSION) = q$Revision: 494 $ =~ /^Revision:\s+([^\s+])/; @@ -138,9 +141,8 @@ sub display_entity { if ($param{outer} and not $param{terse} and not exists $param{att}) { - my $header = $entity->head; print {$output} "
\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, @@ -420,7 +436,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 (); } @@ -428,7 +444,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'. @@ -437,8 +453,26 @@ sub handle_record{ options => {msg=>$msg_number, mbox=>'yes'} ) - ) .'">mbox)'.":
\n"; - $output .= handle_email_message($record->{text}, + ) .'">mbox, '; + my $parser = MIME::Parser->new(); + + # this will be cleaned up once it goes out of scope + my $tempdir = File::Temp->newdir(); + $parser->output_under($tempdir->dirname()); + 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(reply); + + $output .= ')'.":\n"; + $output .= handle_email_message($entity, ref => $bug_number, msg_num => $msg_number, %param, @@ -456,8 +490,8 @@ sub __libravatar_url { if (not defined $config{libravatar_uri} or not length $config{libravatar_uri}) { return undef; } - ($email) = get_addresses($email); - return $config{libravatar_uri}.uri_escape($email.($config{libravatar_uri_options}//'')); + ($email) = grep {/\@/} get_addresses($email); + return $config{libravatar_uri}.uri_escape_utf8($email.($config{libravatar_uri_options}//'')); }