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 2006/10/11 14:04:17 UTC
svn commit: r462783 - in
/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin:
Plugin/MIMEHeader.pm Util.pm
Author: jm
Date: Wed Oct 11 05:04:16 2006
New Revision: 462783
URL: http://svn.apache.org/viewvc?view=rev&rev=462783
Log:
refactor shared regexp->qr conversion code
Modified:
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/MIMEHeader.pm
spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Util.pm
Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/MIMEHeader.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/MIMEHeader.pm?view=diff&rev=462783&r1=462782&r2=462783
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/MIMEHeader.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Plugin/MIMEHeader.pm Wed Oct 11 05:04:16 2006
@@ -105,7 +105,7 @@
return unless $self->{parser}->is_delimited_regexp_valid($rulename, $pattern);
- $pattern = $pluginobj->make_qr($pattern);
+ $pattern = Mail::SpamAssassin::Util::make_qr($pattern);
return $Mail::SpamAssassin::Conf::INVALID_VALUE unless $pattern;
$self->{mimeheader_tests}->{$rulename} = {
@@ -177,30 +177,6 @@
}
return ($negated ? 1 : 0);
-}
-
-# ---------------------------------------------------------------------------
-
-# turn "/foobar/i" into qr/(?i)foobar/
-sub make_qr {
- my ($self, $pattern) = @_;
-
- my $re_delim;
- if ($pattern =~ s/^m(\W)//) { # m!foo/bar!
- $re_delim = $1;
- } else { # /foo\/bar/ or !foo/bar!
- $pattern =~ s/^(\W)//; $re_delim = $1;
- }
- if (!$re_delim) {
- return;
- }
-
- $pattern =~ s/${re_delim}([imsx]*)$//;
-
- my $mods = $1;
- if ($mods) { $pattern = "(?".$mods.")".$pattern; }
-
- return qr/$pattern/;
}
# ---------------------------------------------------------------------------
Modified: spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Util.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Util.pm?view=diff&rev=462783&r1=462782&r2=462783
==============================================================================
--- spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Util.pm (original)
+++ spamassassin/branches/jm_re2c_hacks/lib/Mail/SpamAssassin/Util.pm Wed Oct 11 05:04:16 2006
@@ -1450,28 +1450,42 @@
sub regexp_remove_delimiters {
my ($re) = @_;
- my $mods = '';
- if ($re =~ s/^m{//) {
- $re =~ s/}([a-z]*)$//; $mods = $1;
- }
- elsif ($re =~ s/^m\(//) {
- $re =~ s/\)([a-z]*)$//; $mods = $1;
- }
- elsif ($re =~ s/^m<//) {
- $re =~ s/>([a-z]*)$//; $mods = $1;
- }
- elsif ($re =~ s/^m(\W)//) {
- $re =~ s/\Q$1\E([a-z]*)$//; $mods = $1;
- }
- elsif ($re =~ s/^\/(.*)\/([a-z]*)$/$1/) {
- $mods = $2;
+ my $delim;
+ if (!defined $re || $re eq '') {
+ warn "cannot remove delimiters from null regexp";
+ return undef; # invalid
+ }
+ elsif ($re =~ s/^m{//) { # m{foo/bar}
+ $delim = '}';
+ }
+ elsif ($re =~ s/^m\(//) { # m(foo/bar)
+ $delim = ')';
+ }
+ elsif ($re =~ s/^m<//) { # m<foo/bar>
+ $delim = '>';
+ }
+ elsif ($re =~ s/^m(\W)//) { # m#foo/bar#
+ $delim = $1;
+ } else { # /foo\/bar/ or !foo/bar!
+ $re =~ s/^(\W)//; $delim = $1;
}
+ $re =~ s/\Q${delim}\E([imsx]*)$// or warn "unbalanced re: $re";
+
+ my $mods = $1;
if ($mods) {
$re = "(?".$mods.")".$re;
}
return $re;
+}
+
+# turn "/foobar/i" into qr/(?i)foobar/
+
+sub make_qr {
+ my ($re) = @_;
+ $re = regexp_remove_delimiters($re);
+ return qr/$re/;
}
###########################################################################