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 2012/09/06 15:17:25 UTC

svn commit: r1381591 - in /spamassassin/trunk: lib/Mail/SpamAssassin/Message.pm lib/Mail/SpamAssassin/Plugin/BodyEval.pm rulesrc/sandbox/kmcgrail/20_body_tests.cf

Author: mmartinec
Date: Thu Sep  6 13:17:24 2012
New Revision: 1381591

URL: http://svn.apache.org/viewvc?rev=1381591&view=rev
Log:
Bug 6830: check_body_length - provide a has_check_body_length feature test capability, deal with truncated messages

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/BodyEval.pm
    spamassassin/trunk/rulesrc/sandbox/kmcgrail/20_body_tests.cf

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm?rev=1381591&r1=1381590&r2=1381591&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm Thu Sep  6 13:17:24 2012
@@ -292,9 +292,19 @@ sub new {
   # Store the pristine body for later -- store as a copy since @message
   # will get modified below
   $self->{'pristine_body'} = join('', @message);
-  # This is currently used by an eval test check_body_length.  
-  # Possible To-Do: Base the length on the @message array later down?  Or a different copy of the message post decoding?
-  $self->{'pristine_body_length'} = length($self->{'pristine_body'});
+
+  # pristine_body_length is currently used by an eval test check_body_length.  
+  # Possible To-Do: Base the length on the @message array later down?
+  # Or a different copy of the message post decoding?
+  if ($self->{suppl_attrib} && defined $self->{suppl_attrib}{body_size}) {
+    # optional info provided by a caller; should reflect the original
+    # message body size if provided, and as such it may differ from the
+    # $self->{pristine_body} size, e.g. when the caller passed a truncated
+    # message to SpamAssassin, or when counting line-endings differently
+    $self->{'pristine_body_length'} = $self->{suppl_attrib}{body_size};
+  } else {
+    $self->{'pristine_body_length'} = length($self->{'pristine_body'});
+  }
 
   # CRLF -> LF
   # also merge multiple blank lines into a single one

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/BodyEval.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/BodyEval.pm?rev=1381591&r1=1381590&r2=1381591&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/BodyEval.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Plugin/BodyEval.pm Thu Sep  6 13:17:24 2012
@@ -286,15 +286,16 @@ sub _check_stock_info {
 sub check_body_length {
   my ($self, $pms, undef, $min) = @_;
 
-  #print "DEBUG: KAM $min - $pms->{msg}->{pristine_body_length}\n";
+  my $body_length = $pms->{msg}->{pristine_body_length};
+  dbg("eval: body_length - %s - check for min of %s", $body_length, $min);
 
-  dbg("eval: body_length - $pms->{msg}->{pristine_body_length} - check for min of $min");
-
-  if (defined($pms->{msg}->{pristine_body_length}) and $pms->{msg}->{pristine_body_length} <= $min) {
-    return 1;
-  } else {
-    return 0;
-  }
+  return (defined $body_length && $body_length <= $min) ? 1 : 0;
 }
 
+# ---------------------------------------------------------------------------
+
+# capability checks for "if can()":
+#
+sub has_check_body_length { 1 }
+
 1;

Modified: spamassassin/trunk/rulesrc/sandbox/kmcgrail/20_body_tests.cf
URL: http://svn.apache.org/viewvc/spamassassin/trunk/rulesrc/sandbox/kmcgrail/20_body_tests.cf?rev=1381591&r1=1381590&r2=1381591&view=diff
==============================================================================
--- spamassassin/trunk/rulesrc/sandbox/kmcgrail/20_body_tests.cf (original)
+++ spamassassin/trunk/rulesrc/sandbox/kmcgrail/20_body_tests.cf Thu Sep  6 13:17:24 2012
@@ -24,8 +24,7 @@
 ###########################################################################
 
 ifplugin Mail::SpamAssassin::Plugin::BodyEval
-  if (version >= 3.004000)
-
+  if can(Mail::SpamAssassin::Plugin::BodyEval::has_check_body_length)
 	body            __KAM_BODY_LENGTH_LT_128        eval:check_body_length('128')
         describe        __KAM_BODY_LENGTH_LT_128        The length of the body of the email is less than 128 bytes.