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/;
 }
 
 ###########################################################################