X-Git-Url: https://git.donarmstrong.com/?p=debbugs.git;a=blobdiff_plain;f=lib%2FDebbugs%2FMIME.pm;h=579f3329ffd73ee27598b6d806e41bc8a8bdad1e;hp=fec3b6e2dc4e1dd43d8d31c020c27343407d0e30;hb=HEAD;hpb=aca5afe9ba07638bfde9162e0d24e1b476308e27 diff --git a/lib/Debbugs/MIME.pm b/lib/Debbugs/MIME.pm index fec3b6e..579f332 100644 --- a/lib/Debbugs/MIME.pm +++ b/lib/Debbugs/MIME.pm @@ -44,7 +44,7 @@ BEGIN { %EXPORT_TAGS = (mime => [qw(parse create_mime_message getmailbody), qw(parse_to_mime_entity), ], - rfc1522 => [qw(decode_rfc1522 encode_rfc1522)], + rfc1522 => [qw(decode_rfc1522 encode_rfc1522 handle_escaped_commas)], ); @EXPORT_OK=(); Exporter::export_ok_tags(keys %EXPORT_TAGS); @@ -54,6 +54,7 @@ BEGIN { use File::Path qw(remove_tree); use File::Temp qw(tempdir); use MIME::Parser; +use Mail::Message::Field; use POSIX qw(strftime); use List::AllUtils qw(apply); @@ -396,4 +397,36 @@ sub encode_rfc1522 { return $string; } +=head2 + + $header = handle_escaped_commas('','From: ') + +Handle commas in addresses which have been RFC1522 escaped and now need to be +quoted to avoid parsing as a record separator. + +=cut + +sub handle_escaped_commas { + my ($modified_hdr, $orig_hdr) = @_; + + my $field = Mail::Message::Field->new($orig_hdr); + # if the header isn't structured, it can't contain an address + if (not $field->isStructured()) { + return $modified_hdr + } + if ($field->name() !~ m/^(?:to|from|reply-to)$/) { + return $modified_hdr + } + my @addresses = $field->addresses(); + if (not @addresses) { + return $modified_hdr + } + my @return_addresses; + for my $address (@addresses) { + $address->phrase(decode_rfc1522($address->phrase())); + push @return_addresses, $address->format(); + } + return join(', ',@return_addresses) +} + 1;