vlc/vlc-3.0 | branch: master | Francois Cartegnie <fcvlc...@free.fr> | Mon Feb 19 18:04:10 2018 +0100| [e7d5f26c25fc26d42bb2877032f0f7c77e1cccfd] | committer: Francois Cartegnie
playlist: xspf: revert to unrolling on multiple attributes (fix #19755) regression in e21706e9e3bdc13cfe33bd292ba7cddcc3954ee6 (cherry picked from commit c7b8f7b43119d632ce3539cf0a48b10320b4708e) > http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=e7d5f26c25fc26d42bb2877032f0f7c77e1cccfd --- modules/demux/playlist/xspf.c | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/modules/demux/playlist/xspf.c b/modules/demux/playlist/xspf.c index 72884d056d..5800cc3b0e 100644 --- a/modules/demux/playlist/xspf.c +++ b/modules/demux/playlist/xspf.c @@ -314,24 +314,30 @@ static bool parse_playlist_node COMPLEX_INTERFACE if(b_empty_node) return false; + bool b_version_found = false; /* read all playlist attributes */ - const char *psz_version = get_node_attribute(p_xml_reader, "version"); - if(!psz_version || (strcmp(psz_version, "0") && strcmp(psz_version, "1"))) + const char *psz_name, *psz_value; + while ((psz_name = xml_ReaderNextAttr(p_xml_reader, &psz_value)) != NULL) { - /* attribute version is mandatory !!! */ - if(!psz_version) - msg_Warn(p_stream, "<playlist> requires \"version\" attribute"); + if (!strcmp(psz_name, "version")) + { + b_version_found = true; + if (strcmp(psz_value, "0") && strcmp(psz_value, "1")) + msg_Warn(p_stream, "unsupported XSPF version %s", psz_value); + } + else if (!strcmp(psz_name, "xmlns") || !strcmp(psz_name, "xmlns:vlc")) + ; + else if (!strcmp(psz_name, "xml:base")) + { + free(sys->psz_base); + sys->psz_base = strdup(psz_value); + } else - msg_Warn(p_stream, "unsupported XSPF version %s", psz_version); - return false; - } - - const char *psz_base = get_node_attribute(p_xml_reader, "xml:base"); - if(psz_base) - { - free(sys->psz_base); - sys->psz_base = strdup(psz_base); + msg_Warn(p_stream, "invalid <playlist> attribute: \"%s\"", psz_name); } + /* attribute version is mandatory !!! */ + if (!b_version_found) + msg_Warn(p_stream, "<playlist> requires \"version\" attribute"); static const xml_elem_hnd_t pl_elements[] = { {"title", {.smpl = set_item_info}, false }, @@ -620,6 +626,7 @@ static bool parse_extension_node COMPLEX_INTERFACE if(b_empty_node) return false; + /* read all extension node attributes */ const char *psz_application = get_node_attribute(p_xml_reader, "application"); if (!psz_application) { @@ -661,6 +668,7 @@ static bool parse_extitem_node COMPLEX_INTERFACE if(!b_empty_node) return false; + /* read all extension node attributes */ const char *psz_tid = get_node_attribute(p_xml_reader, "tid"); if(psz_tid) i_tid = atoi(psz_tid); _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits