← Index
NYTProf Performance Profile   « line view »
For /usr/local/bin/sa-learn
  Run on Sun Nov 5 03:09:29 2017
Reported on Mon Nov 6 13:20:49 2017

Filename/usr/local/lib/perl5/site_perl/Mail/SpamAssassin/Plugin/WhiteListSubject.pm
StatementsExecuted 28 statements in 1.54ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11173µs307µsMail::SpamAssassin::Plugin::WhiteListSubject::::newMail::SpamAssassin::Plugin::WhiteListSubject::new
11152µs161µsMail::SpamAssassin::Plugin::WhiteListSubject::::set_configMail::SpamAssassin::Plugin::WhiteListSubject::set_config
11134µs34µsMail::SpamAssassin::Plugin::WhiteListSubject::::BEGIN@46Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@46
11128µs33µsMail::SpamAssassin::Plugin::WhiteListSubject::::BEGIN@49Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@49
11122µs31µsMail::SpamAssassin::Plugin::WhiteListSubject::::BEGIN@47Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@47
11121µs46µsMail::SpamAssassin::Plugin::WhiteListSubject::::BEGIN@48Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@48
11120µs87µsMail::SpamAssassin::Plugin::WhiteListSubject::::BEGIN@52Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@52
11120µs73µsMail::SpamAssassin::Plugin::WhiteListSubject::::BEGIN@50Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@50
0000s0sMail::SpamAssassin::Plugin::WhiteListSubject::::__ANON__[:107]Mail::SpamAssassin::Plugin::WhiteListSubject::__ANON__[:107]
0000s0sMail::SpamAssassin::Plugin::WhiteListSubject::::__ANON__[:91]Mail::SpamAssassin::Plugin::WhiteListSubject::__ANON__[:91]
0000s0sMail::SpamAssassin::Plugin::WhiteListSubject::::_check_subjectMail::SpamAssassin::Plugin::WhiteListSubject::_check_subject
0000s0sMail::SpamAssassin::Plugin::WhiteListSubject::::check_subject_in_blacklistMail::SpamAssassin::Plugin::WhiteListSubject::check_subject_in_blacklist
0000s0sMail::SpamAssassin::Plugin::WhiteListSubject::::check_subject_in_whitelistMail::SpamAssassin::Plugin::WhiteListSubject::check_subject_in_whitelist
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# <@LICENSE>
2# Licensed to the Apache Software Foundation (ASF) under one or more
3# contributor license agreements. See the NOTICE file distributed with
4# this work for additional information regarding copyright ownership.
5# The ASF licenses this file to you under the Apache License, Version 2.0
6# (the "License"); you may not use this file except in compliance with
7# the License. You may obtain a copy of the License at:
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16# </@LICENSE>
17
18=head1 NAME
19
20Mail::SpamAssassin::Plugin::WhiteListSubject - whitelist by Subject header
21
22=head1 SYNOPSIS
23
24 loadplugin Mail::SpamAssassin::Plugin::WhiteListSubject
25
26 header SUBJECT_IN_WHITELIST eval:check_subject_in_whitelist()
27 header SUBJECT_IN_BLACKLIST eval:check_subject_in_blacklist()
28
29 score SUBJECT_IN_WHITELIST -100
30 score SUBJECT_IN_BLACKLIST 100
31
32 whitelist_subject [Bug *]
33 blacklist_subject Make Money Fast
34
35=head1 DESCRIPTION
36
37This SpamAssassin plugin module provides eval tests for whitelisting and blacklisting
38particular strings in the Subject header. The value for whitelist_subject or
39blacklist_subject are strings which may contain file -glob -style patterns,
40similar to the other whitelist_* config options.
41
42=cut
43
44package Mail::SpamAssassin::Plugin::WhiteListSubject;
45
46264µs134µs
# spent 34µs within Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@46 which was called: # once (34µs+0s) by Mail::SpamAssassin::PluginHandler::load_plugin at line 46
use Mail::SpamAssassin::Plugin;
47254µs240µs
# spent 31µs (22+9) within Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@47 which was called: # once (22µs+9µs) by Mail::SpamAssassin::PluginHandler::load_plugin at line 47
use strict;
# spent 31µs making 1 call to Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@47 # spent 9µs making 1 call to strict::import
48255µs271µs
# spent 46µs (21+25) within Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@48 which was called: # once (21µs+25µs) by Mail::SpamAssassin::PluginHandler::load_plugin at line 48
use warnings;
# spent 46µs making 1 call to Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@48 # spent 25µs making 1 call to warnings::import
49256µs238µs
# spent 33µs (28+5) within Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@49 which was called: # once (28µs+5µs) by Mail::SpamAssassin::PluginHandler::load_plugin at line 49
use bytes;
# spent 33µs making 1 call to Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@49 # spent 5µs making 1 call to bytes::import
50257µs2127µs
# spent 73µs (20+54) within Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@50 which was called: # once (20µs+54µs) by Mail::SpamAssassin::PluginHandler::load_plugin at line 50
use re 'taint';
# spent 73µs making 1 call to Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@50 # spent 54µs making 1 call to re::import
51
5221.13ms2154µs
# spent 87µs (20+67) within Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@52 which was called: # once (20µs+67µs) by Mail::SpamAssassin::PluginHandler::load_plugin at line 52
use vars qw(@ISA);
# spent 87µs making 1 call to Mail::SpamAssassin::Plugin::WhiteListSubject::BEGIN@52 # spent 67µs making 1 call to vars::import
53112µs@ISA = qw(Mail::SpamAssassin::Plugin);
54
55# constructor: register the eval rule
56
# spent 307µs (73+234) within Mail::SpamAssassin::Plugin::WhiteListSubject::new which was called: # once (73µs+234µs) by Mail::SpamAssassin::PluginHandler::load_plugin at line 1 of (eval 75)[Mail/SpamAssassin/PluginHandler.pm:129]
sub new {
5712µs my $class = shift;
5812µs my $mailsaobject = shift;
59
6012µs $class = ref($class) || $class;
61110µs119µs my $self = $class->SUPER::new($mailsaobject);
# spent 19µs making 1 call to Mail::SpamAssassin::Plugin::new
6212µs bless ($self, $class);
63
64110µs135µs $self->register_eval_rule ("check_subject_in_whitelist");
# spent 35µs making 1 call to Mail::SpamAssassin::Plugin::register_eval_rule
6516µs119µs $self->register_eval_rule ("check_subject_in_blacklist");
# spent 19µs making 1 call to Mail::SpamAssassin::Plugin::register_eval_rule
66
6717µs1161µs $self->set_config($mailsaobject->{conf});
68
69110µs return $self;
70}
71
72
# spent 161µs (52+109) within Mail::SpamAssassin::Plugin::WhiteListSubject::set_config which was called: # once (52µs+109µs) by Mail::SpamAssassin::Plugin::WhiteListSubject::new at line 67
sub set_config {
7312µs my ($self, $conf) = @_;
74
7512µs my @cmds;
76
77 push(@cmds, {
78 setting => 'whitelist_subject',
79 default => {},
80 type => $Mail::SpamAssassin::Conf::CONF_TYPE_ADDRLIST,
81 code => sub {
82 my ($self, $key, $value, $line) = @_;
83
84 $value = lc $value;
85 my $re = $value;
86 $re =~ s/[\000\\\(]/_/gs; # paranoia
87 $re =~ s/([^\*\?_a-zA-Z0-9])/\\$1/g; # escape any possible metachars
88 $re =~ tr/?/./; # "?" -> "."
89 $re =~ s/\*+/\.\*/g; # "*" -> "any string"
90 $conf->{$key}->{$value} = ${re};
91114µs }});
92
93 push(@cmds, {
94 setting => 'blacklist_subject',
95 default => {},
96 type => $Mail::SpamAssassin::Conf::CONF_TYPE_ADDRLIST,
97 code => sub {
98 my ($self, $key, $value, $line) = @_;
99
100 $value = lc $value;
101 my $re = $value;
102 $re =~ s/[\000\\\(]/_/gs; # paranoia
103 $re =~ s/([^\*\?_a-zA-Z0-9])/\\$1/g; # escape any possible metachars
104 $re =~ tr/?/./; # "?" -> "."
105 $re =~ s/\*+/\.\*/g; # "*" -> "any string"
106 $conf->{$key}->{$value} = ${re};
107119µs }});
108
109115µs1109µs $conf->{parser}->register_commands(\@cmds);
110}
111
112sub check_subject_in_whitelist {
113 my ($self, $permsgstatus) = @_;
114
115 my $subject = $permsgstatus->get('Subject');
116
117 return 0 unless $subject ne '';
118
119 return $self->_check_subject($permsgstatus->{conf}->{whitelist_subject}, $subject);
120}
121
122sub check_subject_in_blacklist {
123 my ($self, $permsgstatus) = @_;
124
125 my $subject = $permsgstatus->get('Subject');
126
127 return 0 unless $subject ne '';
128
129 return $self->_check_subject($permsgstatus->{conf}->{blacklist_subject}, $subject);
130}
131
132sub _check_subject {
133 my ($self, $list, $subject) = @_;
134
135 $subject = lc $subject;
136
137 return 1 if defined($list->{$subject});
138
139 study $subject; # study is a no-op since perl 5.16.0, eliminating bugs
140 foreach my $regexp (values %{$list}) {
141 if ($subject =~ qr/$regexp/i) {
142 return 1;
143 }
144 }
145
146 return 0;
147}
148
14918µs1;