]> Sergey Matveev's repositories - public-inbox.git/commitdiff
precheck: stricter checks including min length
authorEric Wong <e@80x24.org>
Wed, 9 Apr 2014 00:06:53 +0000 (00:06 +0000)
committerEric Wong <e@80x24.org>
Wed, 9 Apr 2014 01:29:42 +0000 (01:29 +0000)
We should reject values which are too short to be useful or sane.

lib/PublicInbox.pm
t/precheck.t

index b05fd8c5607853af1050054162818b6ecbdd4706..cfa9d4bf9d9ca6dd8baf06eaf918fbb3a379e150 100644 (file)
@@ -4,6 +4,7 @@ package PublicInbox;
 use strict;
 use warnings;
 use Email::Address;
+use Date::Parse qw(strptime);
 use constant MAX_SIZE => 1024 * 500; # same as spamc default
 
 # drop plus addressing for matching
@@ -17,13 +18,25 @@ sub __drop_plus {
 sub precheck {
        my ($klass, $filter, $recipient) = @_;
        my $simple = $filter->simple;
-       return 0 unless $simple->header("Message-ID");
-       return 0 unless defined($filter->from);
-       return 0 unless $simple->header("Subject");
+       my $mid = $simple->header("Message-ID");
+       return 0 unless usable_str(length('<m@h>'), $mid) && $mid =~ /\@/;
+       return 0 unless usable_str(length('u@h'), $filter->from);
+       return 0 unless usable_str(length(':o'), $simple->header("Subject"));
+       return 0 unless usable_date($simple->header("Date"));
        return 0 if length($simple->as_string) > MAX_SIZE;
        recipient_specified($filter, $recipient);
 }
 
+sub usable_str {
+       my ($len, $str) = @_;
+       defined($str) && length($str) >= $len;
+}
+
+sub usable_date {
+       my @t = eval { strptime(@_) };
+       scalar @t;
+}
+
 sub recipient_specified {
        my ($filter, $recipient) = @_;
        defined($recipient) or return 1; # for mass imports
index 1bfa4c9f644f5d13028922485838d5b700896004..acfd5e8b46f0530ccbc1672fdc7687d8204af7e8 100644 (file)
@@ -36,7 +36,8 @@ sub do_checks {
                        Cc => 'c@example.com',
                        'Content-Type' => 'text/plain',
                        Subject => 'this is a subject',
-                       'Message-ID' => '<MID>',
+                       'Message-ID' => '<MID@host>',
+                       Date => 'Wed, 09 Apr 2014 01:28:34 +0000',
                ],
                body => "hello world\n",
        ));
@@ -50,7 +51,8 @@ sub do_checks {
                        Cc => 'John Doe <c@example.com>',
                        'Content-Type' => 'text/plain',
                        Subject => 'this is a subject',
-                       'Message-ID' => '<MID>',
+                       'Message-ID' => '<MID@host>',
+                       Date => 'Wed, 09 Apr 2014 01:28:34 +0000',
                ],
                body => "hello world\n",
        ));
@@ -64,7 +66,8 @@ sub do_checks {
                        Cc => 'c@example.com',
                        'Content-Type' => 'text/plain',
                        Subject => 'this is a subject',
-                       'Message-ID' => '<MID>',
+                       'Message-ID' => '<MID@host>',
+                       Date => 'Wed, 09 Apr 2014 01:28:34 +0000',
                ],
                body => "hello world\n",
        );