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));
+            }
           }
         }
       }