You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2008/03/03 12:40:59 UTC
svn commit: r633044 - /spamassassin/trunk/build/mkrules
Author: jm
Date: Mon Mar 3 03:40:58 2008
New Revision: 633044
URL: http://svn.apache.org/viewvc?rev=633044&view=rev
Log:
build/mkrules: ensure rule metadata output is valid UTF-8
Modified:
spamassassin/trunk/build/mkrules
Modified: spamassassin/trunk/build/mkrules
URL: http://svn.apache.org/viewvc/spamassassin/trunk/build/mkrules?rev=633044&r1=633043&r2=633044&view=diff
==============================================================================
--- spamassassin/trunk/build/mkrules (original)
+++ spamassassin/trunk/build/mkrules Mon Mar 3 03:40:58 2008
@@ -116,6 +116,7 @@
my $newest_out_mtime = 0;
my $default_file_header = join('', <DATA>);
+compile_utf8ify_function();
foreach my $src (@opt_srcs) {
if (!-d $src) {
@@ -926,11 +927,25 @@
if ($opt_rulemetadata) {
open (RULEMD, ">".$opt_rulemetadata)
or die "cannot write rulemd to $opt_rulemetadata";
- print RULEMD "<rulemds>", $rulemd, "</rulemds>\n";
+ print RULEMD "<?xml version='1.0' encoding='UTF-8'?>\n",
+ "<rulemds>", $rulemd, "</rulemds>\n";
close RULEMD or die "cannot close rulemd to $opt_rulemetadata";
}
}
+# conditionally build a method to UTF-8-encode a string. this is only required
+# for the rulemetadata XML output, so don't make it mandatory!
+sub compile_utf8ify_function {
+ if (!eval '
+ sub utf8ify { use Encode; return Encode::encode("UTF-8", $_[0]); } 1;
+ ')
+ {
+ eval '
+ sub utf8ify { die "unimplemented -- Encode module required!" } 1;
+ '
+ }
+}
+
sub get_rulemetadata_string {
my ($rule) = @_;
@@ -957,6 +972,8 @@
if ($rules->{$name}->{code}) {
$code = $rules->{$name}->{code};
$code =~ s/\]\]>/\](defanged by mkrules)\]>/gs; # ensure it's CDATA-safe
+ $code = utf8ify($code);
+
}
my $tf = $rules->{$name}->{tflags} || '';