X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FHval.pm;h=0677865e3958f3bd02dd54f80955e26a259d28d0;hb=HEAD;hp=fb21041acafcaa534c3563a1f191f902acc631df;hpb=6c853f5256f3a324c018a37a9e8a6b9fc8fdc063;p=public-inbox.git
diff --git a/lib/PublicInbox/Hval.pm b/lib/PublicInbox/Hval.pm
index fb21041a..0677865e 100644
--- a/lib/PublicInbox/Hval.pm
+++ b/lib/PublicInbox/Hval.pm
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020 all contributors
+# Copyright (C) 2014-2021 all contributors
# License: AGPL-3.0+
#
# represents a header value in various forms. Used for HTML generation
@@ -34,7 +34,7 @@ my %escape_sequence = (
"\x7f" => '\\x7f', # DEL
);
-my %xhtml_map = (
+our %xhtml_map = (
'"' => '"',
'&' => '&',
"'" => ''',
@@ -82,15 +82,22 @@ sub obfuscate_addrs ($$;$) {
my $repl = $_[2] // '•';
my $re = $ibx->{-no_obfuscate_re}; # regex of domains
my $addrs = $ibx->{-no_obfuscate}; # { $address => 1 }
- $_[1] =~ s/(([\w\.\+=\-]+)\@([\w\-]+\.[\w\.\-]+))/
- my ($addr, $user, $domain) = ($1, $2, $3);
- if ($addrs->{$addr} || ((defined $re && $domain =~ $re))) {
- $addr;
+ $_[1] =~ s#(\S+)\@([\w\-]+\.[\w\.\-]+)#
+ my ($pfx, $domain) = ($1, $2);
+ if (index($pfx, '://') > 0 || $pfx !~ s/([\w\.\+=\-]+)\z//) {
+ "$pfx\@$domain";
} else {
- $domain =~ s!([^\.]+)\.!$1$repl!;
- $user . '@' . $domain
+ my $user = $1;
+ my $addr = "$user\@$domain";
+ if ($addrs->{$addr} || ((defined($re) &&
+ $domain =~ $re))) {
+ $pfx.$addr;
+ } else {
+ $domain =~ s!([^\.]+)\.!$1$repl!;
+ $pfx . $user . '@' . $domain
+ }
}
- /sge;
+ #sge;
}
# like format_sanitized_subject in git.git pretty.c with '%f' format string
@@ -111,7 +118,7 @@ $ESCAPES{'/'} = ':'; # common
sub to_attr ($) {
my ($str) = @_;
- # git would never do this to us:
+ # git would never do this to us, mail diff uses // to prevent anchors:
return if index($str, '//') >= 0;
my $first = '';