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} || '';