diff --git a/src/song.cpp b/src/song.cpp index bf44697e..74861d3f 100644 --- a/src/song.cpp +++ b/src/song.cpp @@ -371,9 +371,16 @@ std::string MPD::Song::Format_ParseBraces(std::string::const_iterator &it, std:: else result += *it; } + int brace_counter = 0; if (*it != '}' || !has_some_tags) { - for (; *it != '}'; ++it) { } + for (; *it != '}' || brace_counter; ++it) + { + if (*it == '{') + ++brace_counter; + else if (*it == '}') + --brace_counter; + } if (*++it == '|') return Format_ParseBraces(++it, end_it); else @@ -381,8 +388,17 @@ std::string MPD::Song::Format_ParseBraces(std::string::const_iterator &it, std:: } else { - if (*++it == '|') - for (; *it != '}' || *++it == '|'; ++it) { } + if (*(it+1) == '|') + { + for (; *it != '}' || *(it+1) == '|' || brace_counter; ++it) + { + if (*it == '{') + ++brace_counter; + else if (*it == '}') + --brace_counter; + } + } + ++it; return result; } }