You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2004/02/29 03:32:30 UTC

svn commit: rev 6928 - in incubator/spamassassin/trunk: . lib/Mail/SpamAssassin t

Author: jm
Date: Sat Feb 28 18:32:29 2004
New Revision: 6928

Added:
   incubator/spamassassin/trunk/t/ip_addrs.t   (contents, props changed)
Modified:
   incubator/spamassassin/trunk/MANIFEST
   incubator/spamassassin/trunk/lib/Mail/SpamAssassin/Constants.pm
Log:
bug 2793: IP_ADDRESS re was matching IPv4-in-IPv6 addrs wrongly

Modified: incubator/spamassassin/trunk/MANIFEST
==============================================================================
--- incubator/spamassassin/trunk/MANIFEST	(original)
+++ incubator/spamassassin/trunk/MANIFEST	Sat Feb 28 18:32:29 2004
@@ -311,3 +311,4 @@
 rules/25_uribl.cf
 lib/Mail/SpamAssassin/Plugin/RelayCountry.pm
 lib/Mail/SpamAssassin/Plugin/URIDNSBL.pm
+t/ip_addrs.t

Modified: incubator/spamassassin/trunk/lib/Mail/SpamAssassin/Constants.pm
==============================================================================
--- incubator/spamassassin/trunk/lib/Mail/SpamAssassin/Constants.pm	(original)
+++ incubator/spamassassin/trunk/lib/Mail/SpamAssassin/Constants.pm	Sat Feb 28 18:32:29 2004
@@ -87,7 +87,8 @@
 # ---------------------------------------------------------------------------
 # an IP address, in IPv4 format only.
 #
-$IPV4_ADDRESS = qr/\b(?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.
+$IPV4_ADDRESS = qr/\b
+		    (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.
                     (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.
                     (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.
                     (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)
@@ -97,16 +98,28 @@
 # an IP address, in IPv4, IPv4-mapped-in-IPv6, or IPv6 format.  NOTE: cannot
 # just refer to $IPV4_ADDRESS, due to perl bug reported in nesting qr//s. :(
 #
-$IP_ADDRESS = qr/\b (?:IPv6:|) (?: (?:0*:0*:ffff:(?:0*:|)|) # IPv4-mapped-in-IPv6
-                    (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.
-                    (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.
-                    (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.
-                    (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)
-                  | # an IPv6 address, seems to always be at least 6 words
-                    [a-f0-9]{0,4} \:[a-f0-9]{0,4}
-                    \:[a-f0-9]{0,4} \:[a-f0-9]{0,4}
-                    \:[a-f0-9]{0,4} \:[a-f0-9]{0,4} (?:\:[a-f0-9]{0,4})*
-                  )\b/oxi;
+$IP_ADDRESS = qr/
+		    (?:
+		      \b(?<!:)	# ensure no "::" IPv4 marker before this one
+		      # plain IPv4, as above
+		      (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.
+		      (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.
+		      (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.
+		      (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\b
+		    |
+		      # IPv4 mapped in IPv6
+		      \:\: (?:[a-f0-9]{0,4}\:){0,4}
+		      (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.
+		      (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.
+		      (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\.
+		      (?:1\d\d|2[0-4]\d|25[0-5]|\d\d|\d)\b
+		    |
+		      # a pure-IPv6 address
+		      # don't use \b here, it hits on :'s
+		      (?<!:)
+		      (?:[a-f0-9]{0,4}\:){0,7} [a-f0-9]{0,4}
+		    )
+		  /oxi;
 
 # ---------------------------------------------------------------------------
 

Added: incubator/spamassassin/trunk/t/ip_addrs.t
==============================================================================
--- (empty file)
+++ incubator/spamassassin/trunk/t/ip_addrs.t	Sat Feb 28 18:32:29 2004
@@ -0,0 +1,82 @@
+#!/usr/bin/perl
+
+BEGIN {
+  if (-e 't/test_dir') { # if we are running "t/rule_tests.t", kluge around ...
+    chdir 't';
+  }
+
+  if (-e 'test_dir') {            # running from test directory, not ..
+    unshift(@INC, '../blib/lib');
+    unshift(@INC, '../lib');
+  }
+}
+
+my $prefix = '.';
+if (-e 'test_dir') {            # running from test directory, not ..
+  $prefix = '..';
+}
+
+use strict;
+use Test;
+use Mail::SpamAssassin;
+
+use Mail::SpamAssassin::NetSet;
+
+my $sa = Mail::SpamAssassin->new({
+    rules_filename => "$prefix/rules",
+});
+
+plan tests => 47;
+
+sub tryone {
+  my ($pat, $testip) = @_;
+#warn "matching $testip gainst $pat\n";
+  if ($testip =~ /^$pat$/) {
+    return 1;
+  } else {
+    return 0;
+  }
+}
+
+use Mail::SpamAssassin::Constants;
+
+sub tryipv4s {
+  my $pat = shift;
+  ok (tryone ($pat, "127.0.0.1"));
+  ok (tryone ($pat, "255.255.255.255"));
+  ok (tryone ($pat, "1.0.0.1"));
+  ok (tryone ($pat, "0.0.0.1"));
+  ok (tryone ($pat, "255.5.4.128"));
+  ok (!tryone ($pat, "255.5.n.128"));
+  ok (!tryone ($pat, "-1.0.0.1"));
+  ok (!tryone ($pat, "256.0.0.1"));
+  ok (!tryone ($pat, "10.0.0.256"));
+  ok (!tryone ($pat, "10.0.0.999999"));
+  ok (!tryone ($pat, "255.5.-1.128"));
+  ok (!tryone ($pat, "255.5.-1.128."));
+  ok (!tryone ($pat, "100.1.2"));
+  ok (!tryone ($pat, "100.1"));
+}
+
+tryipv4s ($Mail::SpamAssassin::IPV4_ADDRESS);
+tryipv4s ($Mail::SpamAssassin::IP_ADDRESS);
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "FEDC:BA98:7654:3210:FEDC:BA98:7654:3210"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "::ffff:64.142.3.173"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "fec0::1"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "1080:0:0:0:8:800:200C:417A"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "1080::8:800:200C:417A"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "0:0:0:0:0:0:0:0"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "::"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "fec0:02::0060:1dff:fff7:2109"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "fec0:02::0060:1dff:ff1e:26ee"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "3ffe:ffff:0100:f101:0210:a4ff:fee3:9566"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "3ffe:ffff:100:f101:210:a4ff:fee3:9566"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "3ffe:ffff:100:f101::1"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "::1"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "::192.168.0.1"));
+ok (!tryone ($Mail::SpamAssassin::IP_ADDRESS, "FEDC:BA98:7654:3210:FEDC:BA98:7654:3210:"));
+ok (!tryone ($Mail::SpamAssassin::IP_ADDRESS, "FEDC:BA98:7654:3210:FEDC:BA98:7654:3210:9348"));
+ok (!tryone ($Mail::SpamAssassin::IP_ADDRESS, "3ffe:fffff:100:f101:210:a4ff:fee3:9566"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "ff02:0:0:0:0:0:1"));
+ok (tryone ($Mail::SpamAssassin::IP_ADDRESS, "ff02:0:0:0:0:0:2"));
+