File: header.t

package info (click to toggle)
spamassassin 4.0.2-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 25,724 kB
  • sloc: perl: 89,143; ansic: 5,193; sh: 3,737; javascript: 339; sql: 295; makefile: 209; python: 49
file content (154 lines) | stat: -rwxr-xr-x 4,087 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/usr/bin/perl -T

use lib '.'; use lib 't';
use SATest; sa_t_init("header");
use Test::More tests => 38;

# ---------------------------------------------------------------------------

tstprefs('
  # exists
  header TEST_EXISTS1 exists:To
  header TEST_EXISTS2 exists:Not-Exist

  # if-unset
  header TEST_UNSET1 Not-Exist =~ /./
  header TEST_UNSET2 Not-Exist =~ /^UNSET$/ [if-unset: UNSET]
  header TEST_UNSET3 Not-Exist =~ /^NOT$/ [if-unset: UNSET]

  # exists should not leak to a redefined test
  header TEST_LEAK1 exists:Not-Exist
  header TEST_LEAK1 To =~ /notexist/

  # if-unset should not leak to a redefined test
  header TEST_LEAK2 Not-Exist =~ /^UNSET$/ [if-unset: UNSET]
  header TEST_LEAK2 Not-Exist =~ /^UNSET$/

  # op should not leak to a redefined test
  header TEST_LEAK3 To !~ /./
  header TEST_LEAK3 To =~ /notfound/

  # Test 4.0 :first :last parser
  header HEADER_FIRST1 X-Hashcash:first =~ /^0:040315:test@example.com:69781c87bae95c03$/
  header HEADER_LAST1 X-Hashcash:last =~ /^1:20:040806:test1@example.com:test=foo:482b788d12eb9b56:2a3349$/
  header HEADER_ALL1 X-Hashcash =~ /^0:040315:.*1:20:040806:/s

  # Meta should evaluate all
  meta TEST_META (TEST_EXISTS1 && TEST_UNSET2 && HEADER_FIRST1 && HEADER_LAST1 && HEADER_ALL1)

  # ALL newlines (Bug 8121)
  header TEST_ALL1 ALL =~ /\nTo: announce@ximian\.com\nContent-Type:/
  # ALL selector
  header TEST_ALL2 ALL-TRUSTED =~ /\nDelivered-To: jm@netnoteinc.com\nReceived:/
  header TEST_ALL3 ALL-UNTRUSTED =~ /\nDelivered-To:/
');

%patterns = (
  q{ 1.0 TEST_EXISTS1 }, '',
  q{ 1.0 TEST_UNSET2 }, '',
  q{ 1.0 HEADER_FIRST1 }, '',
  q{ 1.0 HEADER_LAST1 }, '',
  q{ 1.0 HEADER_ALL1 }, '',
  q{ 1.0 TEST_META }, '',
  q{ 1.0 TEST_ALL1 }, '',
  q{ 1.0 TEST_ALL2 }, '',
);
%anti_patterns = (
  q{ TEST_EXISTS2 }, '',
  q{ TEST_UNSET1 }, '',
  q{ TEST_UNSET3 }, '',
  q{ TEST_LEAK1 }, '',
  q{ TEST_LEAK2 }, '',
  q{ TEST_LEAK3 }, '',
  q{ TEST_ALL3 }, '',
);

ok (sarun ("-L -t < data/nice/001", \&patterns_run_cb));
ok_all_patterns();

##########################################

tstprefs('
  # Check for invalid header parsing (Bug 8342)

  header INVALID_FROM eval:check_invalid_from()
  score INVALID_FROM 2.0

  header INVALID_SENDER eval:check_invalid_sender()
  score INVALID_SENDER 2.0

  header INVALID_REPLY eval:check_invalid_replyto()
  score INVALID_REPLY 2.0
');

%patterns = (
    q{ 2.0 INVALID_FROM }, 'INVALID_FROM',
);
%anti_patterns = (
    q{ 2.0 INVALID_REPLY }, 'INVALID_REPLY',
    q{ 2.0 INVALID_SENDER }, 'INVALID_SENDER',
);

ok (sarun ("-L -t < data/spam/invalid_from", \&patterns_run_cb));
ok_all_patterns();

%patterns = (
    q{ 2.0 INVALID_SENDER }, 'INVALID_SENDER',
);
%anti_patterns = (
    q{ 2.0 INVALID_FROM }, 'INVALID_FROM',
    q{ 2.0 INVALID_REPLY }, 'INVALID_REPLY',
);

ok (sarun ("-L -t < data/spam/invalid_sender", \&patterns_run_cb));
ok_all_patterns();

%patterns = (
    q{ 2.0 INVALID_REPLY }, 'INVALID_REPLY',
);
%anti_patterns = (
    q{ 2.0 INVALID_FROM }, 'INVALID_FROM',
    q{ 2.0 INVALID_SENDER }, 'INVALID_SENDER',
);

ok (sarun ("-L -t < data/spam/invalid_replyto", \&patterns_run_cb));
ok_all_patterns();

##########################################

tstprefs('
  # Test 4.0 multiple :addr parser
  header TO1 To:addr =~ /(?:@.*?){1}/s
  header TONEG1 To:addr =~ /(?:@.*?){2}/s
  header CC1 Cc:addr =~ /(?:@.*?){5}/s
  header CCNEG1 Cc:addr =~ /(?:@.*?){6}/s
  header TOCC1 ToCc:addr =~ /(?:@.*?){6}/s
  header TOCCNEG1 ToCc:addr =~ /(?:@.*?){7}/s
  header __TO_COUNT To:addr =~ /^.+$/m
  tflags __TO_COUNT multiple
  meta TO2 __TO_COUNT == 1
  header __CC_COUNT Cc:addr =~ /^.+$/m
  tflags __CC_COUNT multiple
  meta CC2 __CC_COUNT == 5
  header __TOCC_COUNT ToCc:addr =~ /^.+$/m
  tflags __TOCC_COUNT multiple
  meta TOCC2 __TOCC_COUNT == 6
');

%patterns = (
  q{ 1.0 TO1 }, '',
  q{ 1.0 CC1 }, '',
  q{ 1.0 TOCC1 }, '',
  q{ 1.0 TO2 }, '',
  q{ 1.0 CC2 }, '',
  q{ 1.0 TOCC2 }, '',
);
%anti_patterns = (
  q{ TONEG }, '',
  q{ CCNEG }, '',
  q{ TOCCNEG }, '',
);

ok (sarun ("-L -t < data/nice/006", \&patterns_run_cb));
ok_all_patterns();