You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by he...@apache.org on 2019/08/30 07:49:31 UTC

svn commit: r1866128 - in /spamassassin: branches/3.4/lib/Mail/SpamAssassin/Message.pm trunk/lib/Mail/SpamAssassin/Message.pm trunk/rules/20_body_tests.cf trunk/rules/50_scores.cf

Author: hege
Date: Fri Aug 30 07:49:30 2019
New Revision: 1866128

URL: http://svn.apache.org/viewvc?rev=1866128&view=rev
Log:
Bug 7747 - Limit checked mime parts

Modified:
    spamassassin/branches/3.4/lib/Mail/SpamAssassin/Message.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm
    spamassassin/trunk/rules/20_body_tests.cf
    spamassassin/trunk/rules/50_scores.cf

Modified: spamassassin/branches/3.4/lib/Mail/SpamAssassin/Message.pm
URL: http://svn.apache.org/viewvc/spamassassin/branches/3.4/lib/Mail/SpamAssassin/Message.pm?rev=1866128&r1=1866127&r2=1866128&view=diff
==============================================================================
--- spamassassin/branches/3.4/lib/Mail/SpamAssassin/Message.pm (original)
+++ spamassassin/branches/3.4/lib/Mail/SpamAssassin/Message.pm Fri Aug 30 07:49:30 2019
@@ -905,6 +905,7 @@ sub _parse_multipart {
   my $header;
   my $part_array;
   my $found_end_boundary;
+  my $partcnt = 0;
 
   my $line_count = @{$body};
   foreach ( @{$body} ) {
@@ -977,6 +978,13 @@ sub _parse_multipart {
 	}
       }
 
+      # Maximum parts to process
+      if (++$partcnt == 1000) {
+        dbg("message: mimepart limit exceeded, stopping parsing");
+        $self->{'mimepart_limit_exceeded'} = 1;
+        return;
+      }
+
       # make sure we start with a new clean node
       $in_body  = 0;
       $part_msg = Mail::SpamAssassin::Message::Node->new({ normalize=>$self->{normalize} });

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm?rev=1866128&r1=1866127&r2=1866128&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Message.pm Fri Aug 30 07:49:30 2019
@@ -975,6 +975,7 @@ sub _parse_multipart {
   my $header;
   my $part_array;
   my $found_end_boundary;
+  my $partcnt = 0;
 
   my $line_count = @{$body};
   foreach ( @{$body} ) {
@@ -1059,6 +1060,13 @@ sub _parse_multipart {
 	}
       }
 
+      # Maximum parts to process
+      if (++$partcnt == 1000) {
+        dbg("message: mimepart limit exceeded, stopping parsing");
+        $self->{'mimepart_limit_exceeded'} = 1;
+        return;
+      }
+
       # make sure we start with a new clean node
       $in_body  = 0;
       $part_msg = Mail::SpamAssassin::Message::Node->new({ normalize=>$self->{normalize} });

Modified: spamassassin/trunk/rules/20_body_tests.cf
URL: http://svn.apache.org/viewvc/spamassassin/trunk/rules/20_body_tests.cf?rev=1866128&r1=1866127&r2=1866128&view=diff
==============================================================================
--- spamassassin/trunk/rules/20_body_tests.cf (original)
+++ spamassassin/trunk/rules/20_body_tests.cf Fri Aug 30 07:49:30 2019
@@ -151,6 +151,9 @@ rawbody __MIME_CHARSET_FARAWAY	eval:chec
 body MIME_BAD_ISO_CHARSET	eval:check_for_mime('mime_bad_iso_charset')
 describe MIME_BAD_ISO_CHARSET	MIME character set is an unknown ISO charset
 
+body MIMEPART_LIMIT_EXCEEDED	eval:check_for_mime('mimepart_limit_exceeded')
+describe MIMEPART_LIMIT_EXCEEDED Message has too many MIME parts
+
 endif
 
 ###########################################################################

Modified: spamassassin/trunk/rules/50_scores.cf
URL: http://svn.apache.org/viewvc/spamassassin/trunk/rules/50_scores.cf?rev=1866128&r1=1866127&r2=1866128&view=diff
==============================================================================
--- spamassassin/trunk/rules/50_scores.cf (original)
+++ spamassassin/trunk/rules/50_scores.cf Fri Aug 30 07:49:30 2019
@@ -616,6 +616,7 @@ score MISSING_MIME_HB_SEP 0.001 0.001 0.
 score MULTIPART_ALT_NON_TEXT 0 # n=0 n=1 n=2 n=3
 # </gen:mutable>
 score MIME_QP_LONG_LINE 0.001
+score MIMEPART_LIMIT_EXCEEDED 0.001
 
 # ok_locales
 score CHARSET_FARAWAY 3.200