Damjan Jovanovic : winemenubuilder: Escape XML special characters in MIME types.

Alexandre Julliard julliard at winehq.org
Fri Nov 13 09:37:06 CST 2009


Module: wine
Branch: master
Commit: e1e07b40ba31dc3296652799157c2e802e76a503
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e1e07b40ba31dc3296652799157c2e802e76a503

Author: Damjan Jovanovic <damjan.jov at gmail.com>
Date:   Thu Nov 12 21:42:19 2009 +0200

winemenubuilder: Escape XML special characters in MIME types.

---

 programs/winemenubuilder/winemenubuilder.c |   34 +++++++++++++++++++++++++--
 1 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c
index fb13878..7bcdd44 100644
--- a/programs/winemenubuilder/winemenubuilder.c
+++ b/programs/winemenubuilder/winemenubuilder.c
@@ -730,6 +730,26 @@ static char* heap_printf(const char *format, ...)
     return ret;
 }
 
+static void write_xml_text(FILE *file, const char *text)
+{
+    int i;
+    for (i = 0; text[i]; i++)
+    {
+        if (text[i] == '&')
+            fputs("&amp;", file);
+        else if (text[i] == '<')
+            fputs("&lt;", file);
+        else if (text[i] == '>')
+            fputs("&gt;", file);
+        else if (text[i] == '\'')
+            fputs("&apos;", file);
+        else if (text[i] == '"')
+            fputs("&quot;", file);
+        else
+            fputc(text[i], file);
+    }
+}
+
 static BOOL create_directories(char *directory)
 {
     BOOL ret = TRUE;
@@ -1805,10 +1825,18 @@ static BOOL write_freedesktop_mime_type_entry(const char *packages_dir, const ch
         {
             fprintf(packageFile, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
             fprintf(packageFile, "<mime-info xmlns=\"http://www.freedesktop.org/standards/shared-mime-info\">\n");
-            fprintf(packageFile, "  <mime-type type=\"%s\">\n", mime_type);
-            fprintf(packageFile, "    <glob pattern=\"*%s\"/>\n", dot_extension);
+            fprintf(packageFile, "  <mime-type type=\"");
+            write_xml_text(packageFile, mime_type);
+            fprintf(packageFile, "\">\n");
+            fprintf(packageFile, "    <glob pattern=\"*");
+            write_xml_text(packageFile, dot_extension);
+            fprintf(packageFile, "\"/>\n");
             if (comment)
-                fprintf(packageFile, "    <comment>%s</comment>\n", comment);
+            {
+                fprintf(packageFile, "    <comment>");
+                write_xml_text(packageFile, comment);
+                fprintf(packageFile, "</comment>\n");
+            }
             fprintf(packageFile, "  </mime-type>\n");
             fprintf(packageFile, "</mime-info>\n");
             ret = TRUE;




More information about the wine-cvs mailing list