← Index
NYTProf Performance Profile   « line view »
For /usr/local/bin/sa-learn
  Run on Tue Nov 7 05:38:10 2017
Reported on Tue Nov 7 06:16:05 2017

Filename/usr/local/lib/perl5/site_perl/Mail/SpamAssassin/Plugin/URIEval.pm
StatementsExecuted 25 statements in 1.47ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11197µs242µsMail::SpamAssassin::Plugin::URIEval::::newMail::SpamAssassin::Plugin::URIEval::new
11132µs32µsMail::SpamAssassin::Plugin::URIEval::::BEGIN@20Mail::SpamAssassin::Plugin::URIEval::BEGIN@20
11126µs230µsMail::SpamAssassin::Plugin::URIEval::::BEGIN@21Mail::SpamAssassin::Plugin::URIEval::BEGIN@21
11125µs58µsMail::SpamAssassin::Plugin::URIEval::::BEGIN@24Mail::SpamAssassin::Plugin::URIEval::BEGIN@24
11124µs37µsMail::SpamAssassin::Plugin::URIEval::::BEGIN@25Mail::SpamAssassin::Plugin::URIEval::BEGIN@25
11122µs48µsMail::SpamAssassin::Plugin::URIEval::::BEGIN@23Mail::SpamAssassin::Plugin::URIEval::BEGIN@23
11120µs93µsMail::SpamAssassin::Plugin::URIEval::::BEGIN@28Mail::SpamAssassin::Plugin::URIEval::BEGIN@28
11119µs84µsMail::SpamAssassin::Plugin::URIEval::::BEGIN@26Mail::SpamAssassin::Plugin::URIEval::BEGIN@26
0000s0sMail::SpamAssassin::Plugin::URIEval::::check_for_http_redirectorMail::SpamAssassin::Plugin::URIEval::check_for_http_redirector
0000s0sMail::SpamAssassin::Plugin::URIEval::::check_https_ip_mismatchMail::SpamAssassin::Plugin::URIEval::check_https_ip_mismatch
0000s0sMail::SpamAssassin::Plugin::URIEval::::check_uri_truncatedMail::SpamAssassin::Plugin::URIEval::check_uri_truncated
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
18package Mail::SpamAssassin::Plugin::URIEval;
19
20258µs132µs
# spent 32µs within Mail::SpamAssassin::Plugin::URIEval::BEGIN@20 which was called: # once (32µs+0s) by Mail::SpamAssassin::PluginHandler::load_plugin at line 20
use Mail::SpamAssassin::Plugin;
# spent 32µs making 1 call to Mail::SpamAssassin::Plugin::URIEval::BEGIN@20
21279µs2434µs
# spent 230µs (26+204) within Mail::SpamAssassin::Plugin::URIEval::BEGIN@21 which was called: # once (26µs+204µs) by Mail::SpamAssassin::PluginHandler::load_plugin at line 21
use Mail::SpamAssassin::Logger;
# spent 230µs making 1 call to Mail::SpamAssassin::Plugin::URIEval::BEGIN@21 # spent 204µs making 1 call to Exporter::import
22
23284µs274µs
# spent 48µs (22+26) within Mail::SpamAssassin::Plugin::URIEval::BEGIN@23 which was called: # once (22µs+26µs) by Mail::SpamAssassin::PluginHandler::load_plugin at line 23
use strict;
# spent 48µs making 1 call to Mail::SpamAssassin::Plugin::URIEval::BEGIN@23 # spent 26µs making 1 call to strict::import
24273µs292µs
# spent 58µs (25+33) within Mail::SpamAssassin::Plugin::URIEval::BEGIN@24 which was called: # once (25µs+33µs) by Mail::SpamAssassin::PluginHandler::load_plugin at line 24
use warnings;
# spent 58µs making 1 call to Mail::SpamAssassin::Plugin::URIEval::BEGIN@24 # spent 33µs making 1 call to warnings::import
25266µs251µs
# spent 37µs (24+14) within Mail::SpamAssassin::Plugin::URIEval::BEGIN@25 which was called: # once (24µs+14µs) by Mail::SpamAssassin::PluginHandler::load_plugin at line 25
use bytes;
# spent 37µs making 1 call to Mail::SpamAssassin::Plugin::URIEval::BEGIN@25 # spent 14µs making 1 call to bytes::import
26284µs2149µs
# spent 84µs (19+65) within Mail::SpamAssassin::Plugin::URIEval::BEGIN@26 which was called: # once (19µs+65µs) by Mail::SpamAssassin::PluginHandler::load_plugin at line 26
use re 'taint';
# spent 84µs making 1 call to Mail::SpamAssassin::Plugin::URIEval::BEGIN@26 # spent 65µs making 1 call to re::import
27
282936µs2167µs
# spent 93µs (20+74) within Mail::SpamAssassin::Plugin::URIEval::BEGIN@28 which was called: # once (20µs+74µs) by Mail::SpamAssassin::PluginHandler::load_plugin at line 28
use vars qw(@ISA);
# spent 93µs making 1 call to Mail::SpamAssassin::Plugin::URIEval::BEGIN@28 # spent 74µs making 1 call to vars::import
29114µs@ISA = qw(Mail::SpamAssassin::Plugin);
30
31# constructor: register the eval rule
32
# spent 242µs (97+144) within Mail::SpamAssassin::Plugin::URIEval::new which was called: # once (97µs+144µs) by Mail::SpamAssassin::PluginHandler::load_plugin at line 1 of (eval 103)[Mail/SpamAssassin/PluginHandler.pm:129]
sub new {
3312µs my $class = shift;
3412µs my $mailsaobject = shift;
35
36 # some boilerplate...
3712µs $class = ref($class) || $class;
38118µs128µs my $self = $class->SUPER::new($mailsaobject);
# spent 28µs making 1 call to Mail::SpamAssassin::Plugin::new
3912µs bless ($self, $class);
40
41 # the important bit!
42115µs150µs $self->register_eval_rule("check_for_http_redirector");
# spent 50µs making 1 call to Mail::SpamAssassin::Plugin::register_eval_rule
4316µs138µs $self->register_eval_rule("check_https_ip_mismatch");
# spent 38µs making 1 call to Mail::SpamAssassin::Plugin::register_eval_rule
4416µs127µs $self->register_eval_rule("check_uri_truncated");
# spent 27µs making 1 call to Mail::SpamAssassin::Plugin::register_eval_rule
45
46117µs return $self;
47}
48
49###########################################################################
50
51sub check_for_http_redirector {
52 my ($self, $pms) = @_;
53
54 foreach ($pms->get_uri_list()) {
55 while (s{^https?://([^/:\?]+).+?(https?:/{0,2}?([^/:\?]+).*)$}{$2}i) {
56 my ($redir, $dest) = ($1, $3);
57 foreach ($redir, $dest) {
58 $_ = $self->{main}->{registryboundaries}->uri_to_domain($_) || $_;
59 }
60 next if ($redir eq $dest);
61 dbg("eval: redirect: found $redir to $dest, flagging");
62 return 1;
63 }
64 }
65 return 0;
66}
67
68###########################################################################
69
70sub check_https_ip_mismatch {
71 my ($self, $pms) = @_;
72
73 while (my($k,$v) = each %{$pms->{html}->{uri_detail}}) {
74 next if ($k !~ m%^https?:/*(?:[^\@/]+\@)?\d+\.\d+\.\d+\.\d+%i);
75 foreach (@{$v->{anchor_text}}) {
76 next if (m%^https:/*(?:[^\@/]+\@)?\d+\.\d+\.\d+\.\d+%i);
77 if (m%https:%i) {
78 keys %{$self->{html}->{uri_detail}}; # resets iterator, bug 4829
79 return 1;
80 }
81 }
82 }
83
84 return 0;
85}
86
87###########################################################################
88
89# is there a better way to do this?
90sub check_uri_truncated {
91 my ($self, $pms) = @_;
92 return $pms->{'uri_truncated'};
93}
94
9518µs1;