use MIME::Parser;
use Debbugs::MIME qw(decode_rfc1522 create_mime_message getmailbody);
-use Debbugs::Mail qw(send_mail_message encode_headers);
+use Debbugs::Mail qw(send_mail_message encode_headers get_addresses);
use Debbugs::Packages qw(getpkgsrc);
use Debbugs::User qw(read_usertags write_usertags);
use Debbugs::Common qw(:lock get_hashname);
-use Debbugs::Status qw(writebug isstrongseverity lockreadbugmerge lockreadbug);
+use Debbugs::Status qw(writebug isstrongseverity lockreadbugmerge lockreadbug read_bug splitpackages :versions);
use Debbugs::CGI qw(html_escape bug_url);
use Debbugs::Text qw(:templates);
-use Debbugs::Status qw(:versions);
use Debbugs::Config qw(:globals :config);
use Debbugs::Control qw(append_action_to_log);
# extract pseudo-headers
for my $phline (@bodylines)
{
+ # Remove BOM markers from UTF-8 strings
+ # Fixes #488554
+ $phline =~ s/\xef\xbb\xbf//g;
last if $phline !~ m/^([\w-]+):\s*(\S.*)/;
my ($fn, $fv) = ($1, $2);
$fv =~ s/\s*$//;
{
my $bfound;
($bfound, $data)= &lockreadbugmerge($tryref);
- if ($bfound) {
+ if ($bfound and not $data->{archived}) {
$ref= $tryref;
} else {
&sendmessage(create_mime_message(
References => join(' ',grep {defined $_} $header{'message-id'},$data->{msgid}),
Precedence => 'bulk',
"X-$gProject-PR-Message" => 'error',
- ],message_body_template('process_unknown_bug_number',
+ ],message_body_template('mail/process_unknown_bug_number',
{subject => $subject,
date => $header{date},
baddress => $baddress,
To => "$data->{originator}",
Subject => "$gBug#$ref closed by $markedby ($header{'subject'})",
"Message-ID" => "<handler.$ref.$nn.notifdone\@$gEmailDomain>",
- "In-Reply-To" => "$data->{msgid}",
- References => join(' ',grep {defined $_} $header{'message-id'},$data->{msgid}),
+ (defined $data->{msgid})?("In-Reply-To" => $data->{msgid}):(),
+ References => join(' ',grep {defined $_} ($header{'message-id'},$data->{msgid})),
"X-$gProject-PR-Message" => "they-closed $ref",
"X-$gProject-PR-Package" => "$data->{package}",
"X-$gProject-PR-Keywords" => "$data->{keywords}",
$data->{fixed_versions} = [];
if (defined $pheader{source}) {
- $data->{package} = $pheader{source};
+ # source packages are identified by the src: prefix
+ $data->{package} = 'src:'.$pheader{source};
} elsif (defined $pheader{package}) {
$data->{package} = $pheader{package};
} elsif (defined $config{default_package}) {
my $xcchdr= $header{ 'x-debbugs-cc' } || '';
if ($xcchdr =~ m/\S/) {
- push(@resentccs,$xcchdr);
+ push(@resentccs,get_addresses($xcchdr));
$resentccexplain.= fill_template('mail/xdebbugscc',
{xcchdr => $xcchdr},
);
}
close(SOURCES);
my $anymaintfound=0; my $anymaintnotfound=0;
- for my $p (split(m/[ \t?,():]+/,$data->{package})) {
+ for my $p (splitpackages($data->{package})) {
$p =~ y/A-Z/a-z/;
$p =~ /([a-z0-9.+-]+)/;
$p = $1;