Module: wine Branch: master Commit: e1e07b40ba31dc3296652799157c2e802e76a503 URL: http://source.winehq.org/git/wine.git/?a=commit;h=e1e07b40ba31dc329665279915...
Author: Damjan Jovanovic damjan.jov@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("&", file); + else if (text[i] == '<') + fputs("<", file); + else if (text[i] == '>') + fputs(">", file); + else if (text[i] == ''') + fputs("'", file); + else if (text[i] == '"') + fputs(""", 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%5C%22%3E%5Cn"); - 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;