diff options
Diffstat (limited to 'libs/gst/check/libcheck/check_print.c')
-rw-r--r-- | libs/gst/check/libcheck/check_print.c | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/libs/gst/check/libcheck/check_print.c b/libs/gst/check/libcheck/check_print.c index f170d60..e29aa7b 100644 --- a/libs/gst/check/libcheck/check_print.c +++ b/libs/gst/check/libcheck/check_print.c @@ -106,6 +106,38 @@ tr_fprint (FILE * file, TestResult * tr, enum print_output print_mode) } } +static void +fprint_xml_esc (FILE * file, const char *str) +{ + for (; *str != '\0'; str++) { + + switch (*str) { + + /* handle special characters that must be escaped */ + case '"': + fputs (""", file); + break; + case '\'': + fputs ("'", file); + break; + case '<': + fputs ("<", file); + break; + case '>': + fputs (">", file); + break; + case '&': + fputs ("&", file); + break; + + /* regular characters, print as is */ + default: + fputc (*str, file); + break; + } + } +} + void tr_xmlprint (FILE * file, TestResult * tr, enum print_output print_mode CK_ATTRIBUTE_UNUSED) @@ -147,8 +179,12 @@ tr_xmlprint (FILE * file, TestResult * tr, fprintf (file, " <fn>%s:%d</fn>\n", file_name, tr->line); fprintf (file, " <id>%s</id>\n", tr->tname); fprintf (file, " <iteration>%d</iteration>\n", tr->iter); - fprintf (file, " <description>%s</description>\n", tr->tcname); - fprintf (file, " <message>%s</message>\n", tr->msg); + fprintf (file, " <description>"); + fprint_xml_esc (file, tr->tcname); + fprintf (file, "</description>\n"); + fprintf (file, " <message>"); + fprint_xml_esc (file, tr->msg); + fprintf (file, "</message>\n"); fprintf (file, " </test>\n"); if (slash != NULL) { |