@@ -786,9 +786,11 @@ sub expand_one_alias {
786
786
}
787
787
788
788
@initial_to = expand_aliases(@initial_to );
789
- @initial_to = ( map { sanitize_address( $_ ) } @initial_to );
789
+ @initial_to = validate_address_list(sanitize_address_list( @initial_to ) );
790
790
@initial_cc = expand_aliases(@initial_cc );
791
+ @initial_cc = validate_address_list(sanitize_address_list(@initial_cc ));
791
792
@bcclist = expand_aliases(@bcclist );
793
+ @bcclist = validate_address_list(sanitize_address_list(@bcclist ));
792
794
793
795
if ($thread && !defined $initial_reply_to && $prompting ) {
794
796
$initial_reply_to = ask(
@@ -839,6 +841,28 @@ sub extract_valid_address {
839
841
return undef ;
840
842
}
841
843
844
+ sub extract_valid_address_or_die {
845
+ my $address = shift ;
846
+ $address = extract_valid_address($address );
847
+ die " error: unable to extract a valid address from: $address \n "
848
+ if !$address ;
849
+ return $address ;
850
+ }
851
+
852
+ sub validate_address {
853
+ my $address = shift ;
854
+ if (!extract_valid_address($address )) {
855
+ print STDERR " W: unable to extract a valid address from: $address \n " ;
856
+ return undef ;
857
+ }
858
+ return $address ;
859
+ }
860
+
861
+ sub validate_address_list {
862
+ return (grep { defined $_ }
863
+ map { validate_address($_ ) } @_ );
864
+ }
865
+
842
866
# Usually don't need to change anything below here.
843
867
844
868
# we make a "fake" message id by taking the current number
@@ -955,6 +979,10 @@ sub sanitize_address {
955
979
956
980
}
957
981
982
+ sub sanitize_address_list {
983
+ return (map { sanitize_address($_ ) } @_ );
984
+ }
985
+
958
986
# Returns the local Fully Qualified Domain Name (FQDN) if available.
959
987
#
960
988
# Tightly configured MTAa require that a caller sends a real DNS
@@ -1017,14 +1045,13 @@ sub maildomain {
1017
1045
1018
1046
sub send_message {
1019
1047
my @recipients = unique_email_list(@to );
1020
- @cc = (grep { my $cc = extract_valid_address ($_ );
1048
+ @cc = (grep { my $cc = extract_valid_address_or_die ($_ );
1021
1049
not grep { $cc eq $_ || $_ =~ / <\Q ${cc} \E >$ / } @recipients
1022
1050
}
1023
- map { sanitize_address($_ ) }
1024
1051
@cc );
1025
1052
my $to = join (" ,\n\t " , @recipients );
1026
1053
@recipients = unique_email_list(@recipients ,@cc ,@bcclist );
1027
- @recipients = (map { extract_valid_address ($_ ) } @recipients );
1054
+ @recipients = (map { extract_valid_address_or_die ($_ ) } @recipients );
1028
1055
my $date = format_2822_time($time ++);
1029
1056
my $gitversion = ' @@GIT_VERSION@@' ;
1030
1057
if ($gitversion =~ m / ..GIT_VERSION../ ) {
@@ -1267,7 +1294,7 @@ sub send_message {
1267
1294
foreach my $addr (parse_address_line($1 )) {
1268
1295
printf (" (mbox) Adding to: %s from line '%s '\n " ,
1269
1296
$addr , $_ ) unless $quiet ;
1270
- push @to , sanitize_address( $addr ) ;
1297
+ push @to , $addr ;
1271
1298
}
1272
1299
}
1273
1300
elsif (/ ^Cc:\s +(.*)$ / ) {
@@ -1376,6 +1403,9 @@ sub send_message {
1376
1403
($confirm =~ / ^(?:auto|compose)$ / && $compose && $message_num == 1));
1377
1404
$needs_confirm = " inform" if ($needs_confirm && $confirm_unconfigured && @cc );
1378
1405
1406
+ @to = validate_address_list(sanitize_address_list(@to ));
1407
+ @cc = validate_address_list(sanitize_address_list(@cc ));
1408
+
1379
1409
@to = (@initial_to , @to );
1380
1410
@cc = (@initial_cc , @cc );
1381
1411
@@ -1431,14 +1461,10 @@ sub unique_email_list {
1431
1461
my @emails ;
1432
1462
1433
1463
foreach my $entry (@_ ) {
1434
- if (my $clean = extract_valid_address($entry )) {
1435
- $seen {$clean } ||= 0;
1436
- next if $seen {$clean }++;
1437
- push @emails , $entry ;
1438
- } else {
1439
- print STDERR " W: unable to extract a valid address" ,
1440
- " from: $entry \n " ;
1441
- }
1464
+ my $clean = extract_valid_address_or_die($entry );
1465
+ $seen {$clean } ||= 0;
1466
+ next if $seen {$clean }++;
1467
+ push @emails , $entry ;
1442
1468
}
1443
1469
return @emails ;
1444
1470
}
0 commit comments