You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by mm...@apache.org on 2013/01/28 19:20:18 UTC
svn commit: r1439552 -
/spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm
Author: mmartinec
Date: Mon Jan 28 18:20:18 2013
New Revision: 1439552
URL: http://svn.apache.org/viewvc?rev=1439552&view=rev
Log:
Bug 6896: DnsResolver.pm: encode characters above 0200 to prevent Net::DNS 0.68 from interpreting these as an IDN domain name
Modified:
spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm?rev=1439552&r1=1439551&r2=1439552&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/DnsResolver.pm Mon Jan 28 18:20:18 2013
@@ -553,7 +553,10 @@ sub new_dns_packet {
$domain = dnsext_dns0x20($domain);
}
# Net::DNS expects RFC 1035 zone format encoding even in its API, silly!
- $domain =~ s{\\}{\\\\}gs;
+ # Since 0.68 it also assumes that domain names containing characters
+ # with codes above 0177 imply that IDN translation is to be performed.
+ $domain =~ s{ ( [\200-\377\\] ) }
+ { ord($1) < 0200 ? "\\$1" : sprintf("\\%03d",ord($1)) }xgse;
$packet = Net::DNS::Packet->new($domain, $type, $class);
# a bit noisy, so commented by default...
@@ -766,9 +769,13 @@ sub poll_responses {
local $1;
if ($id =~ m{^(\d+)/}) {
my $dnsid = $1; # the raw DNS packet id
- info("dns: a likely matching query: %s",
- join(', ', grep(m{^\Q$dnsid\E/},
- keys %{$self->{id_to_callback}})));
+ my @matches =
+ grep(m{^\Q$dnsid\E/}, keys %{$self->{id_to_callback}});
+ if (!@matches) {
+ info("dns: no likely matching queries for id %s", $dnsid);
+ } else {
+ info("dns: a likely matching query: %s", join(', ', @matches));
+ }
}
}
}