Tue, 28 Aug 2012 18:28:45 +0200
Massively update from 5.1 to 5.5 release, completely changing from
autotools to cmake build configuration along with the corresponding
corrections. Correct some less important problems like typical german
english mistakes, as well as use parallel make for faster builds with
SMP and multicore architectures. Warning, the 5.5 releases of MySQL
seem to be equally bug ridden as the 5.1 are, for example building
the NDBCluster storage engine fails.
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; |