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