Fri, 03 Aug 2012 15:56:30 +0200
Use upstream man pages to avoid local help2man failures, likely due to
shell capability assumptions or cross platform environment variance.
The upstream man pages are probably better formatted anyway.
michael@374 | 1 | Index: lib/Mail/SpamAssassin/Dns.pm |
michael@374 | 2 | --- lib/Mail/SpamAssassin/Dns.pm.orig 2010-03-16 15:49:21.000000000 +0100 |
michael@374 | 3 | +++ lib/Mail/SpamAssassin/Dns.pm 2011-02-08 16:03:06.000000000 +0100 |
michael@374 | 4 | @@ -754,7 +754,7 @@ |
michael@374 | 5 | dbg("dns: entering helper-app run mode"); |
michael@374 | 6 | $self->{old_slash} = $/; # Razor pollutes this |
michael@374 | 7 | %{$self->{old_env}} = (); |
michael@374 | 8 | - if ( defined %ENV ) { |
michael@374 | 9 | + if (%ENV) { |
michael@374 | 10 | # undefined values in %ENV can result due to autovivification elsewhere, |
michael@374 | 11 | # this prevents later possible warnings when we restore %ENV |
michael@374 | 12 | while (my ($key, $value) = each %ENV) { |
michael@374 | 13 | Index: lib/Mail/SpamAssassin/HTML.pm |
michael@374 | 14 | --- lib/Mail/SpamAssassin/HTML.pm.orig 2010-03-16 15:49:21.000000000 +0100 |
michael@374 | 15 | +++ lib/Mail/SpamAssassin/HTML.pm 2011-02-08 16:03:06.000000000 +0100 |
michael@374 | 16 | @@ -191,7 +191,7 @@ |
michael@374 | 17 | my $self = shift; |
michael@374 | 18 | my %options = @_; |
michael@374 | 19 | |
michael@374 | 20 | - return join('', @{ $self->{text} }) unless keys %options; |
michael@374 | 21 | + return join('', @{ $self->{text} }) unless %options; |
michael@374 | 22 | |
michael@374 | 23 | my $mask; |
michael@374 | 24 | while (my ($k, $v) = each %options) { |
michael@374 | 25 | Index: lib/Mail/SpamAssassin/Plugin/AntiVirus.pm |
michael@374 | 26 | --- lib/Mail/SpamAssassin/Plugin/AntiVirus.pm.orig 2010-03-16 15:49:21.000000000 +0100 |
michael@374 | 27 | +++ lib/Mail/SpamAssassin/Plugin/AntiVirus.pm 2011-02-08 16:04:30.000000000 +0100 |
michael@374 | 28 | @@ -98,9 +98,9 @@ |
michael@374 | 29 | my ($ctype, $boundary, $charset, $name) = |
michael@374 | 30 | Mail::SpamAssassin::Util::parse_content_type($p->get_header('content-type')); |
michael@374 | 31 | |
michael@374 | 32 | - $name = lc $name || ''; |
michael@374 | 33 | + $name = lc($name || ''); |
michael@374 | 34 | |
michael@374 | 35 | - my $cte = lc $p->get_header('content-transfer-encoding') || ''; |
michael@374 | 36 | + my $cte = lc($p->get_header('content-transfer-encoding') || ''); |
michael@374 | 37 | $ctype = lc $ctype; |
michael@374 | 38 | |
michael@374 | 39 | if ($name && $name =~ /\.(?:ade|adp|asx|bas|bat|chm|cmd|com|cpl|crt|dll|exe|hlp|hta|inf|ins|isp|js|jse|lnk|mda|mdb|mde|mdt|mdw|mdz|msc|msi|msp|mst|nws|ops|pcd|pif|prf|reg|scf|scr\??|sct|shb|shs|shm|swf|url|vb|vbe|vbs|vbx|vxd|wsc|wsf|wsh)$/) |
michael@374 | 40 | Index: lib/Mail/SpamAssassin/Plugin/BodyEval.pm |
michael@374 | 41 | --- lib/Mail/SpamAssassin/Plugin/BodyEval.pm.orig 2010-03-16 15:49:21.000000000 +0100 |
michael@374 | 42 | +++ lib/Mail/SpamAssassin/Plugin/BodyEval.pm 2011-02-08 16:03:06.000000000 +0100 |
michael@374 | 43 | @@ -119,7 +119,7 @@ |
michael@374 | 44 | } |
michael@374 | 45 | |
michael@374 | 46 | # If there are no words, mark if there's at least 1 image ... |
michael@374 | 47 | - if (keys %html == 0 && exists $pms->{html}{inside}{img}) { |
michael@374 | 48 | + if (!%html && exists $pms->{html}{inside}{img}) { |
michael@374 | 49 | # Use "\n" as the mark since it can't ever occur normally |
michael@374 | 50 | $html{"\n"}=1; |
michael@374 | 51 | } |
michael@374 | 52 | Index: lib/Mail/SpamAssassin/Plugin/Check.pm |
michael@374 | 53 | --- lib/Mail/SpamAssassin/Plugin/Check.pm.orig 2010-03-16 15:49:21.000000000 +0100 |
michael@374 | 54 | +++ lib/Mail/SpamAssassin/Plugin/Check.pm 2011-02-08 16:03:06.000000000 +0100 |
michael@374 | 55 | @@ -307,64 +307,51 @@ |
michael@374 | 56 | my $package_name = __PACKAGE__; |
michael@374 | 57 | my $methodname = $package_name."::_".$ruletype."_tests_".$clean_priority; |
michael@374 | 58 | |
michael@374 | 59 | - if (defined &{$methodname} && !$doing_user_rules) { |
michael@374 | 60 | -run_compiled_method: |
michael@374 | 61 | - # dbg("rules: run_generic_tests - calling %s", $methodname); |
michael@374 | 62 | - my $t = Mail::SpamAssassin::Timeout->new({ deadline => $master_deadline }); |
michael@374 | 63 | - my $err = $t->run(sub { |
michael@374 | 64 | - no strict "refs"; |
michael@374 | 65 | - $methodname->($pms, @{$opts{args}}); |
michael@374 | 66 | - }); |
michael@374 | 67 | - if ($t->timed_out() && $master_deadline && time > $master_deadline) { |
michael@374 | 68 | - info("check: exceeded time limit in $methodname, skipping further tests"); |
michael@374 | 69 | - $pms->{deadline_exceeded} = 1; |
michael@374 | 70 | - } |
michael@374 | 71 | - return; |
michael@374 | 72 | - } |
michael@374 | 73 | + if (!defined &{$methodname} || $doing_user_rules) { |
michael@374 | 74 | |
michael@374 | 75 | - # use %nopts for named parameter-passing; it's more friendly to future-proof |
michael@374 | 76 | - # subclassing, since new parameters can be added without breaking third-party |
michael@374 | 77 | - # subclassed implementations of this plugin. |
michael@374 | 78 | - my %nopts = ( |
michael@374 | 79 | - ruletype => $ruletype, |
michael@374 | 80 | - doing_user_rules => $doing_user_rules, |
michael@374 | 81 | - priority => $priority, |
michael@374 | 82 | - clean_priority => $clean_priority |
michael@374 | 83 | - ); |
michael@374 | 84 | - |
michael@374 | 85 | - # build up the eval string... |
michael@374 | 86 | - $self->{evalstr_methodname} = $methodname; |
michael@374 | 87 | - $self->{evalstr_chunk_current_methodname} = undef; |
michael@374 | 88 | - $self->{evalstr_chunk_methodnames} = []; |
michael@374 | 89 | - $self->{evalstr_chunk_prefix} = []; # stack (array) of source code sections |
michael@374 | 90 | - $self->{evalstr} = ''; $self->{evalstr_l} = 0; |
michael@374 | 91 | - $self->{evalstr2} = ''; |
michael@374 | 92 | - $self->begin_evalstr_chunk($pms); |
michael@374 | 93 | - |
michael@374 | 94 | - $self->push_evalstr_prefix($pms, ' |
michael@374 | 95 | - # start_rules_plugin_code '.$ruletype.' '.$priority.' |
michael@374 | 96 | - my $scoresptr = $self->{conf}->{scores}; |
michael@374 | 97 | - '); |
michael@374 | 98 | - if (defined $opts{pre_loop_body}) { |
michael@374 | 99 | - $opts{pre_loop_body}->($self, $pms, $conf, %nopts); |
michael@374 | 100 | - } |
michael@374 | 101 | - $self->add_evalstr($pms, |
michael@374 | 102 | - $self->start_rules_plugin_code($ruletype, $priority) ); |
michael@374 | 103 | - while (my($rulename, $test) = each %{$opts{testhash}->{$priority}}) { |
michael@374 | 104 | - $opts{loop_body}->($self, $pms, $conf, $rulename, $test, %nopts); |
michael@374 | 105 | - } |
michael@374 | 106 | - if (defined $opts{post_loop_body}) { |
michael@374 | 107 | - $opts{post_loop_body}->($self, $pms, $conf, %nopts); |
michael@374 | 108 | - } |
michael@374 | 109 | + # use %nopts for named parameter-passing; it's more friendly |
michael@374 | 110 | + # to future-proof subclassing, since new parameters can be added without |
michael@374 | 111 | + # breaking third-party subclassed implementations of this plugin. |
michael@374 | 112 | + my %nopts = ( |
michael@374 | 113 | + ruletype => $ruletype, |
michael@374 | 114 | + doing_user_rules => $doing_user_rules, |
michael@374 | 115 | + priority => $priority, |
michael@374 | 116 | + clean_priority => $clean_priority |
michael@374 | 117 | + ); |
michael@374 | 118 | + |
michael@374 | 119 | + # build up the eval string... |
michael@374 | 120 | + $self->{evalstr_methodname} = $methodname; |
michael@374 | 121 | + $self->{evalstr_chunk_current_methodname} = undef; |
michael@374 | 122 | + $self->{evalstr_chunk_methodnames} = []; |
michael@374 | 123 | + $self->{evalstr_chunk_prefix} = []; # stack (array) of source code sections |
michael@374 | 124 | + $self->{evalstr} = ''; $self->{evalstr_l} = 0; |
michael@374 | 125 | + $self->{evalstr2} = ''; |
michael@374 | 126 | + $self->begin_evalstr_chunk($pms); |
michael@374 | 127 | + |
michael@374 | 128 | + $self->push_evalstr_prefix($pms, ' |
michael@374 | 129 | + # start_rules_plugin_code '.$ruletype.' '.$priority.' |
michael@374 | 130 | + my $scoresptr = $self->{conf}->{scores}; |
michael@374 | 131 | + '); |
michael@374 | 132 | + if (defined $opts{pre_loop_body}) { |
michael@374 | 133 | + $opts{pre_loop_body}->($self, $pms, $conf, %nopts); |
michael@374 | 134 | + } |
michael@374 | 135 | + $self->add_evalstr($pms, |
michael@374 | 136 | + $self->start_rules_plugin_code($ruletype, $priority) ); |
michael@374 | 137 | + while (my($rulename, $test) = each %{$opts{testhash}->{$priority}}) { |
michael@374 | 138 | + $opts{loop_body}->($self, $pms, $conf, $rulename, $test, %nopts); |
michael@374 | 139 | + } |
michael@374 | 140 | + if (defined $opts{post_loop_body}) { |
michael@374 | 141 | + $opts{post_loop_body}->($self, $pms, $conf, %nopts); |
michael@374 | 142 | + } |
michael@374 | 143 | |
michael@374 | 144 | - $self->flush_evalstr($pms, 'run_generic_tests'); |
michael@374 | 145 | - $self->free_ruleset_source($pms, $ruletype, $priority); |
michael@374 | 146 | + $self->flush_evalstr($pms, 'run_generic_tests'); |
michael@374 | 147 | + $self->free_ruleset_source($pms, $ruletype, $priority); |
michael@374 | 148 | |
michael@374 | 149 | - # clear out a previous version of this method |
michael@374 | 150 | - undef &{$methodname}; |
michael@374 | 151 | + # clear out a previous version of this method |
michael@374 | 152 | + undef &{$methodname}; |
michael@374 | 153 | |
michael@374 | 154 | - # generate the loop that goes through each line... |
michael@374 | 155 | - my $evalstr = <<"EOT"; |
michael@374 | 156 | + # generate the loop that goes through each line... |
michael@374 | 157 | + my $evalstr = <<"EOT"; |
michael@374 | 158 | { |
michael@374 | 159 | package $package_name; |
michael@374 | 160 | |
michael@374 | 161 | @@ -373,40 +360,51 @@ |
michael@374 | 162 | sub $methodname { |
michael@374 | 163 | EOT |
michael@374 | 164 | |
michael@374 | 165 | - for my $chunk_methodname (@{$self->{evalstr_chunk_methodnames}}) { |
michael@374 | 166 | - $evalstr .= " $chunk_methodname(\@_);\n"; |
michael@374 | 167 | - } |
michael@374 | 168 | + for my $chunk_methodname (@{$self->{evalstr_chunk_methodnames}}) { |
michael@374 | 169 | + $evalstr .= " $chunk_methodname(\@_);\n"; |
michael@374 | 170 | + } |
michael@374 | 171 | |
michael@374 | 172 | - $evalstr .= <<"EOT"; |
michael@374 | 173 | + $evalstr .= <<"EOT"; |
michael@374 | 174 | } |
michael@374 | 175 | |
michael@374 | 176 | 1; |
michael@374 | 177 | } |
michael@374 | 178 | EOT |
michael@374 | 179 | |
michael@374 | 180 | - delete $self->{evalstr}; # free up some RAM before we eval() |
michael@374 | 181 | - delete $self->{evalstr2}; |
michael@374 | 182 | - delete $self->{evalstr_methodname}; |
michael@374 | 183 | - delete $self->{evalstr_chunk_current_methodname}; |
michael@374 | 184 | - delete $self->{evalstr_chunk_methodnames}; |
michael@374 | 185 | - delete $self->{evalstr_chunk_prefix}; |
michael@374 | 186 | - |
michael@374 | 187 | - dbg("rules: run_generic_tests - compiling eval code: %s, priority %s", |
michael@374 | 188 | - $ruletype, $priority); |
michael@374 | 189 | -# dbg("rules: eval code to compile: $evalstr"); |
michael@374 | 190 | - my $eval_result; |
michael@374 | 191 | - { my $timer = $self->{main}->time_method('compile_gen'); |
michael@374 | 192 | - $eval_result = eval($evalstr); |
michael@374 | 193 | - } |
michael@374 | 194 | - if (!$eval_result) { |
michael@374 | 195 | - my $eval_stat = $@ ne '' ? $@ : "errno=$!"; chomp $eval_stat; |
michael@374 | 196 | - warn "rules: failed to compile $ruletype tests, skipping:\n". |
michael@374 | 197 | - "\t($eval_stat)\n"; |
michael@374 | 198 | - $pms->{rule_errors}++; |
michael@374 | 199 | - } |
michael@374 | 200 | - else { |
michael@374 | 201 | + delete $self->{evalstr}; # free up some RAM before we eval() |
michael@374 | 202 | + delete $self->{evalstr2}; |
michael@374 | 203 | + delete $self->{evalstr_methodname}; |
michael@374 | 204 | + delete $self->{evalstr_chunk_current_methodname}; |
michael@374 | 205 | + delete $self->{evalstr_chunk_methodnames}; |
michael@374 | 206 | + delete $self->{evalstr_chunk_prefix}; |
michael@374 | 207 | + |
michael@374 | 208 | + dbg("rules: run_generic_tests - compiling eval code: %s, priority %s", |
michael@374 | 209 | + $ruletype, $priority); |
michael@374 | 210 | + # dbg("rules: eval code to compile: $evalstr"); |
michael@374 | 211 | + my $eval_result; |
michael@374 | 212 | + { my $timer = $self->{main}->time_method('compile_gen'); |
michael@374 | 213 | + $eval_result = eval($evalstr); |
michael@374 | 214 | + } |
michael@374 | 215 | + if (!$eval_result) { |
michael@374 | 216 | + my $eval_stat = $@ ne '' ? $@ : "errno=$!"; chomp $eval_stat; |
michael@374 | 217 | + warn "rules: failed to compile $ruletype tests, skipping:\n". |
michael@374 | 218 | + "\t($eval_stat)\n"; |
michael@374 | 219 | + $pms->{rule_errors}++; |
michael@374 | 220 | + return; |
michael@374 | 221 | + } |
michael@374 | 222 | dbg("rules: compiled $ruletype tests"); |
michael@374 | 223 | - goto run_compiled_method; |
michael@374 | 224 | + } |
michael@374 | 225 | + |
michael@374 | 226 | +#run_compiled_method: |
michael@374 | 227 | +# dbg("rules: run_generic_tests - calling %s", $methodname); |
michael@374 | 228 | + my $t = Mail::SpamAssassin::Timeout->new({ deadline => $master_deadline }); |
michael@374 | 229 | + my $err = $t->run(sub { |
michael@374 | 230 | + no strict "refs"; |
michael@374 | 231 | + $methodname->($pms, @{$opts{args}}); |
michael@374 | 232 | + }); |
michael@374 | 233 | + if ($t->timed_out() && $master_deadline && time > $master_deadline) { |
michael@374 | 234 | + info("check: exceeded time limit in $methodname, skipping further tests"); |
michael@374 | 235 | + $pms->{deadline_exceeded} = 1; |
michael@374 | 236 | } |
michael@374 | 237 | } |
michael@374 | 238 | |
michael@374 | 239 | Index: lib/Mail/SpamAssassin/Plugin/MIMEEval.pm |
michael@374 | 240 | --- lib/Mail/SpamAssassin/Plugin/MIMEEval.pm.orig 2010-03-16 15:49:21.000000000 +0100 |
michael@374 | 241 | +++ lib/Mail/SpamAssassin/Plugin/MIMEEval.pm 2011-02-08 16:03:32.000000000 +0100 |
michael@374 | 242 | @@ -498,7 +498,7 @@ |
michael@374 | 243 | # perhaps just limit to test, and image? |
michael@374 | 244 | next if ($ctype eq 'application/ics'); |
michael@374 | 245 | |
michael@374 | 246 | - my $cte = lc $p->get_header('content-transfer-encoding') || ''; |
michael@374 | 247 | + my $cte = lc($p->get_header('content-transfer-encoding') || ''); |
michael@374 | 248 | next if ($cte !~ /^base64$/); |
michael@374 | 249 | foreach my $l ( @{$p->raw()} ) { |
michael@374 | 250 | my $len = length $l; |