From: Jaroslav Kysela Date: Sat, 21 Nov 2015 19:33:38 +0000 (+0100) Subject: XMLTV exporter: escape the prohibited characters, fixes #3333 X-Git-Tag: v4.2.1~1495 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a87689803093e303ac4d458d35ac92c1bfc41f96;p=thirdparty%2Ftvheadend.git XMLTV exporter: escape the prohibited characters, fixes #3333 --- diff --git a/src/htsbuf.h b/src/htsbuf.h index 051395542..a770e2000 100644 --- a/src/htsbuf.h +++ b/src/htsbuf.h @@ -58,6 +58,9 @@ void htsbuf_append(htsbuf_queue_t *hq, const void *buf, size_t len); void htsbuf_append_prealloc(htsbuf_queue_t *hq, const void *buf, size_t len); +static inline void htsbuf_append_str(htsbuf_queue_t *hq, const char *str) + { htsbuf_append(hq, str, strlen(str)); } + void htsbuf_data_free(htsbuf_queue_t *hq, htsbuf_data_t *hd); static inline int htsbuf_empty(htsbuf_queue_t *hq) { return hq->hq_size == 0; } diff --git a/src/webui/xmltv.c b/src/webui/xmltv.c index 173ca51b6..608e2d726 100644 --- a/src/webui/xmltv.c +++ b/src/webui/xmltv.c @@ -39,11 +39,14 @@ http_xmltv_time(char *dst, time_t t) static void http_xmltv_begin(htsbuf_queue_t *hq) { - htsbuf_qprintf(hq, "\ + htsbuf_append_str(hq, "\ \n\ \n\ -\n\ -", tvheadend_version, config.server_name); +\n"); } /* @@ -52,7 +55,7 @@ http_xmltv_begin(htsbuf_queue_t *hq) static void http_xmltv_end(htsbuf_queue_t *hq) { - htsbuf_qprintf(hq, "\n"); + htsbuf_append_str(hq, "\n"); } /* @@ -62,17 +65,17 @@ static void http_xmltv_channel_add(htsbuf_queue_t *hq, const char *hostpath, channel_t *ch) { const char *icon = channel_get_icon(ch); - htsbuf_qprintf(hq, "\ -\n\ - %s\n\ -", idnode_uuid_as_sstr(&ch->ch_id), channel_get_name(ch)); + htsbuf_qprintf(hq, "\n", + idnode_uuid_as_sstr(&ch->ch_id)); + htsbuf_append_and_escape_xml(hq, channel_get_name(ch)); + htsbuf_append_str(hq, "\n"); if (icon) { if (strncmp(icon, "imagecache/", 11) == 0) htsbuf_qprintf(hq, " \n", hostpath, icon); else htsbuf_qprintf(hq, " \n", icon); } - htsbuf_qprintf(hq, "\n"); + htsbuf_append_str(hq, "\n"); } /* @@ -91,15 +94,24 @@ http_xmltv_programme_one(htsbuf_queue_t *hq, const char *hostpath, http_xmltv_time(stop, ebc->stop); htsbuf_qprintf(hq, "\n", start, stop, idnode_uuid_as_sstr(&ch->ch_id)); - RB_FOREACH(lse, e->title, link) - htsbuf_qprintf(hq, " %s\n", lse->lang, lse->str); + RB_FOREACH(lse, e->title, link) { + htsbuf_qprintf(hq, " ", lse->lang); + htsbuf_append_and_escape_xml(hq, lse->str); + htsbuf_append_str(hq, "\n"); + } if (e->subtitle) - RB_FOREACH(lse, e->subtitle, link) - htsbuf_qprintf(hq, " %s\n", lse->lang, lse->str); + RB_FOREACH(lse, e->subtitle, link) { + htsbuf_qprintf(hq, " ", lse->lang); + htsbuf_append_and_escape_xml(hq, lse->str); + htsbuf_append_str(hq, "\n"); + } if (ebc->description) - RB_FOREACH(lse, ebc->description, link) - htsbuf_qprintf(hq, " %s\n", lse->lang, lse->str); - htsbuf_qprintf(hq, "\n"); + RB_FOREACH(lse, ebc->description, link) { + htsbuf_qprintf(hq, " ", lse->lang); + htsbuf_append_and_escape_xml(hq, lse->str); + htsbuf_append_str(hq, "\n"); + } + htsbuf_append_str(hq, "\n"); } /*