diff options
author | Max Kellermann <max@musicpd.org> | 2020-03-12 21:07:37 +0100 |
---|---|---|
committer | Max Kellermann <max@musicpd.org> | 2020-03-12 21:07:37 +0100 |
commit | 82743dfd025ffb6841f61559a5cea3d75f9fd3ce (patch) | |
tree | eaaeef3f8f10c4e84bc93e5fcb43fb66a10e94a9 | |
parent | 33694642bda981aa69f818fdc331f405df622443 (diff) |
playlist/asx: concatenate multiple CharacterData fragments
Similar to c45f1138560b526649bf6e6433fa7d9ba8a6564b
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | src/playlist/plugins/AsxPlaylistPlugin.cxx | 12 |
2 files changed, 11 insertions, 3 deletions
@@ -2,7 +2,7 @@ ver 0.21.21 (not yet released) * configuration - fix bug in "metadata_to_use" setting * playlist - - xspf: fix corrupt tags in the presence of XML entities + - asx, xspf: fix corrupt tags in the presence of XML entities * archive - iso9660: skip empty file names to work around libcdio bug * decoder diff --git a/src/playlist/plugins/AsxPlaylistPlugin.cxx b/src/playlist/plugins/AsxPlaylistPlugin.cxx index daaaa18dd..ec365fe36 100644 --- a/src/playlist/plugins/AsxPlaylistPlugin.cxx +++ b/src/playlist/plugins/AsxPlaylistPlugin.cxx @@ -59,6 +59,8 @@ struct AsxParser { TagBuilder tag_builder; + std::string value; + AsxParser() :state(ROOT) {} @@ -77,6 +79,7 @@ asx_start_element(void *user_data, const XML_Char *element_name, const XML_Char **atts) { AsxParser *parser = (AsxParser *)user_data; + parser->value.clear(); switch (parser->state) { case AsxParser::ROOT: @@ -128,9 +131,15 @@ asx_end_element(void *user_data, const XML_Char *element_name) break; case AsxParser::TAG: + if (!parser->value.empty()) + parser->tag_builder.AddItem(parser->tag_type, + StringView(parser->value.data(), + parser->value.length())); parser->state = AsxParser::ENTRY; break; } + + parser->value.clear(); } static void XMLCALL @@ -144,8 +153,7 @@ asx_char_data(void *user_data, const XML_Char *s, int len) break; case AsxParser::TAG: - parser->tag_builder.AddItem(parser->tag_type, - StringView(s, len)); + parser->value.append(s, len); break; } } |