send-email: detect empty blank lines in command output

The email format does not allow blank lines in headers; detect such
input and report it as malformed and add a test for it.

Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Maxim Cournoyer
2023-05-01 10:38:48 -04:00
committed by Junio C Hamano
parent ba92106e93
commit 3a7a18a045
2 changed files with 27 additions and 2 deletions

View File

@@ -2026,14 +2026,22 @@ foreach my $t (@files) {
}
}
# Execute a command and return its output lines as an array.
# Execute a command and return its output lines as an array. Blank
# lines which do not appear at the end of the output are reported as
# errors.
sub execute_cmd {
my ($prefix, $cmd, $file) = @_;
my @lines = ();
my $seen_blank_line = 0;
open my $fh, "-|", "$cmd \Q$file\E"
or die sprintf(__("(%s) Could not execute '%s'"), $prefix, $cmd);
while (my $line = <$fh>) {
last if $line =~ /^$/;
die sprintf(__("(%s) Malformed output from '%s'"), $prefix, $cmd)
if $seen_blank_line;
if ($line =~ /^$/) {
$seen_blank_line = $line =~ /^$/;
next;
}
push @lines, $line;
}
close $fh