send-email: detect cycles in alias expansion
With the previous code, an alias cycle like: $ echo 'alias a b' >aliases $ echo 'alias b a' >aliases $ git config sendemail.aliasesfile aliases $ git config sendemail.aliasfiletype mutt would put send-email into an infinite loop. This patch detects the situation and complains to the user. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King committed
Jul 23, 2009 at 07:09 UTC
302e04ea4d0c0414cedd716de882fa3dbe3480eb
1 file changed
+11
-7
git-send-email.perl
+11
-7
@@ -655,13 +655,17 @@ if (!@to) {
655
}
656
657
sub expand_aliases {
658
- my @cur = @_;
659
- my @last;
660
- do {
661
- @last = @cur;
662
- @cur = map { $aliases{$_} ? @{$aliases{$_}} : $_ } @last;
663
- } while (join(',',@cur) ne join(',',@last));
664
- return @cur;
658
+ return map { expand_one_alias($_) } @_;
659
+}
660
+
661
+my %EXPANDED_ALIASES;
662
+sub expand_one_alias {
663
+ my $alias = shift;
664
+ if ($EXPANDED_ALIASES{$alias}) {
665
+ die "fatal: alias '$alias' expands to itself\n";
666
+ }
667
+ local $EXPANDED_ALIASES{$alias} = 1;
668
+ return $aliases{$alias} ? expand_aliases(@{$aliases{$alias}}) : $alias;
669
}
670
671
@to = expand_aliases(@to);