use Debbugs::Versions::Dpkg;
use POSIX qw(ceil);
use File::Copy qw(copy);
+use Encode qw(decode encode);
use Storable qw(dclone);
use List::Util qw(min max);
my %namemap = reverse %fields;
for my $line (@lines) {
+ eval {
+ $line = decode("utf8",$line,Encode::FB_CROAK);
+ };
if ($line =~ /(\S+?): (.*)/) {
my ($name, $value) = (lc $1, $2);
# this is a bit of a hack; we should never, ever have \r
# Output field names in proper case, e.g. 'Merged-With'.
my $properfield = $fields{$field};
$properfield =~ s/(?:^|(?<=-))([a-z])/\u$1/g;
- $contents .= "$properfield: $newdata{$field}\n";
+ my $data = $newdata{$field};
+ $contents .= "$properfield: $data\n";
}
}
}
-
+ eval {
+ $contents = encode("utf8",$contents,Encode::FB_CROAK);
+ };
return $contents;
}
use Debbugs::Common qw(:util :quit :misc :lock);
use Debbugs::Status qw(:read :status :write :versions :hook);
+use Debbugs::Packages qw(binary_to_source);
-use Debbugs::MIME qw(decode_rfc1522 encode_rfc1522);
+use Debbugs::MIME qw(decode_rfc1522 encode_rfc1522 create_mime_message);
use Debbugs::Mail qw(send_mail_message);
use Debbugs::User;
use Debbugs::Recipients qw(:all);
use List::Util qw(first);
use Mail::RFC822::Address;
+use Encode qw(decode encode);
chdir($config{spool_dir}) or
die "Unable to chdir to spool_dir '$config{spool_dir}': $!";
my $errors = 0;
my $controlrequestaddr= ($control ? 'control' : 'request').'@'.$config{email_domain};
my $transcript_scalar = '';
-my $transcript = IO::Scalar->new(\$transcript_scalar) or
- die "Unable to create new IO::Scalar";
+open my $transcript, ">:scalar:utf8", \$transcript_scalar or
+ die "Unable to create transcript scalar: $!";
print {$transcript} "Processing commands for $controlrequestaddr:\n\n";
# Fixes #488554
s/\xef\xbb\xbf//g;
next unless m/\S/;
+ eval {
+ my $temp = decode("utf8",$_,Encode::FB_CROAK);
+ $_ = $temp;
+ };
print {$transcript} "> $_\n";
next if m/^\s*\#/;
$action= '';
set_done(@common_control_options,
bug => $ref,
reopen => 1,
- submitter => $new_submitter,
+ defined $new_submitter? (submitter => $new_submitter):(),
);
};
if ($@) {
# Error text here advertises how many errors there were
my $error_text = $errors > 0 ? " (with $errors errors)":'';
-my $reply= <<END;
-From: $gMaintainerEmail ($gProject $gBug Tracking System)
-To: $replyto
-${maintccs}Subject: Processed${error_text}: $header{'subject'}
-In-Reply-To: $header{'message-id'}
-END
-$reply .= <<END;
-References: $header{'message-id'}
-Message-ID: <handler.s.$nn.transcript\@$gEmailDomain>
-Precedence: bulk
-${packagepr}X-$gProject-PR-Message: transcript
-END
-
-$reply .= fill_template('mail/message_body',
- {body => "${transcript_scalar}Please contact me if you need assistance."},
- );
+my @common_headers;
+push @common_headers, 'X-Loop',$gMaintainerEmail;
+
+my $temp_transcript = ${transcript_scalar};
+eval{
+ $temp_transcript = decode("utf8",$temp_transcript,Encode::FB_CROAK);
+};
+my $reply =
+ create_mime_message([From => "$gMaintainerEmail ($gProject $gBug Tracking System)",
+ To => $replyto,
+ @maintccs ? (Cc => join(', ',@maintccs)):(),
+ Subject => "Processed${error_text}: $header{subject}",
+ 'Message-ID' => "<handler.s.$nn.transcript\@$gEmailDomain>",
+ 'In-Reply-To' => $header{'message-id'},
+ References => join(' ',grep {defined $_} $header{'message-id'},$data->{msgid}),
+ Precedence => 'bulk',
+ keys %affected_packages ?("X-${gProject}-PR-Package" => join(' ',keys %affected_packages)):(),
+ keys %affected_packages ?("X-${gProject}-PR-Source" =>
+ join(' ',grep {defined $_} map {binary_to_source(binary => $_)} keys %affected_packages)):(),
+ "X-$gProject-PR-Message" => 'transcript',
+ @common_headers,
+ ],
+ fill_template('mail/message_body',
+ {body => "${temp_transcript}Please contact me if you need assistance."},
+ ));
my $repliedshow= join(', ',$replyto,
determine_recipients(recipients => \%recipients,
address_only => 1,
)
);
+
# -1 is the service.in log
&filelock("lock/-1");
open(AP,">>db-h/-1.log") || die "open db-h/-1.log: $!";
# -*- mode: cperl;-*-
# $Id: 05_mail.t,v 1.1 2005/08/17 21:46:17 don Exp $
-use Test::More tests => 114;
+use Test::More tests => 117;
use warnings;
use strict;
use lib qw(t/lib);
use DebbugsTest qw(:all);
use Data::Dumper;
+use Encode qw(decode encode);
# HTTP::Server:::Simple defines a SIG{CHLD} handler that breaks system; undef it here.
$SIG{CHLD} = sub {};
status_key => 'keywords',
status_value => 'patch',
},
+ utf8_retitle => {command => 'retitle',
+ value => 'Thïs is a ütff8 title [♥♡☙☎]',
+ status_key => 'subject',
+ status_value => decode("utf8",'Thïs is a ütff8 title [♥♡☙☎]'),
+ },
);
# In order for the archive/unarchive to work, we have to munge the summary file slightly