svn commit: r1934363 - spamassassin/trunk/lib/Mail/SpamAssassin/Plugin
[email protected] Mon, 18 May 2026 21:59:48 -0000
| Newsgroups | gmane.mail.spam.spamassassin.cvs |
|---|---|
| Message-ID | <177914158806.402278.476382831851043105@svn03-he-fi> |
Author: fkento
Date: Mon May 18 21:59:47 2026
New Revision: 1934363
Log:
Preserve anchor_text and types from redirected URL
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Redirectors.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDetail.pm
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Redirectors.pm
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Redirectors.pm Mon May 18 21:15:34 2026 (r1934362)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/Redirectors.pm Mon May 18 21:59:47 2026 (r1934363)
@@ -1085,6 +1085,7 @@ sub _check_redir {
# Launch HTTP requests
foreach my $uri (keys %redir_urls) {
+ $redir_urls{$uri}->{source_info} = $pms->{uri_detail_list}->{$uri};
$self->recursive_lookup($redir_urls{$uri}, $pms, $ua);
}
@@ -1123,7 +1124,7 @@ sub recursive_lookup {
if ($location =~ /^\d{3}$/) {
$pms->{"redir_url_$location"} = 1;
# add uri to uri_detail_list
- $pms->add_uri_detail_list($redir_url) if !$pms->{uri_detail_list}->{$redir_url};
+ _add_redirect_uri($pms, $redir_url, $redir_url_info->{source_info});
# Update cache
$self->cache_add($redir_url, $location);
return;
@@ -1174,7 +1175,7 @@ sub recursive_lookup {
$pms->{"redir_url_$rcode"} = 1;
# Update cache
$self->cache_add($redir_url, $rcode);
- $pms->add_uri_detail_list($redir_url) if !$pms->{uri_detail_list}->{$redir_url};
+ _add_redirect_uri($pms, $redir_url, $redir_url_info->{source_info});
if($rcode !~ /^30[12]/) {
# Calling quit prevents session_id from beeing reused
# $ua->quit();
@@ -1209,7 +1210,7 @@ sub recursive_lookup {
$pms->{"redir_url_$rcode"} = 1;
# Update cache
$self->cache_add($redir_url, $rcode);
- $pms->add_uri_detail_list($redir_url) if !$pms->{uri_detail_list}->{$redir_url};
+ _add_redirect_uri($pms, $redir_url, $redir_url_info->{source_info});
}
}
if($rcode !~ /^30[12]/) {
@@ -1302,15 +1303,38 @@ sub recursive_lookup {
return;
}
- $pms->add_uri_detail_list($location) if !$pms->{uri_detail_list}->{$location};
+ _add_redirect_uri($pms, $location, $redir_url_info->{source_info});
# Check for recursion
- if (my $redir_url_info = _check_redirector_uri($location, $conf)) {
+ if (my $new_redir_url_info = _check_redirector_uri($location, $conf)) {
+ # Propagate the original source info through the chain so types and
+ # anchor_text from the message-level URI keep getting merged in.
+ $new_redir_url_info->{source_info} = $redir_url_info->{source_info};
# Recurse...
- $self->recursive_lookup($redir_url_info, $pms, $ua, %been_here);
+ $self->recursive_lookup($new_redir_url_info, $pms, $ua, %been_here);
}
}
+sub _add_redirect_uri {
+ my ($pms, $uri, $src) = @_;
+
+ my %types = $src && $src->{types} ? %{$src->{types}} : ();
+ $types{redirect} = 1;
+
+ my $added = $pms->add_uri_detail_list($uri, \%types);
+
+ if ($src && $src->{anchor_text} && @{$src->{anchor_text}}) {
+ my $dst = $pms->{uri_detail_list}->{$uri} ||= {};
+ my %seen;
+ $seen{$_}++ for @{$dst->{anchor_text} || []};
+ foreach my $at (@{$src->{anchor_text}}) {
+ push @{$dst->{anchor_text}}, $at unless $seen{$at}++;
+ }
+ }
+
+ return $added;
+}
+
sub cache_add {
my ($self, $redir_url, $target_url) = @_;
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDetail.pm
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDetail.pm Mon May 18 21:15:34 2026 (r1934362)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/URIDetail.pm Mon May 18 21:59:47 2026 (r1934363)
@@ -41,7 +41,10 @@ C<raw> is the raw URI prior to any clean
C<type> is the tag(s) which referenced the raw_uri. I<parsed> is a
faked type which specifies that the raw_uri was parsed from the
-rendered text.
+rendered text. I<redirect> is a faked type which specifies that the
+raw_uri was discovered by following a URL redirector (see the
+Redirectors plugin); the tag(s) from the originating URI are also
+preserved on the redirected entry.
C<cleaned> is a list including the raw URI and various cleaned
versions of the raw URI (http://spamassassin.apache%2Eorg/,