From c26703b7e61576c94dd720ff89cd4162ddede250 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 22 Oct 2018 18:34:47 +0200 Subject: [PATCH] SongFilter: check value.empty() after checking tag fallbacks In this new order, a filter 'AlbumArtist ""' matches only on songs which neither have `AlbumArtist` nor `Artist`. --- NEWS | 1 + src/SongFilter.cxx | 18 +++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/NEWS b/NEWS index 8b0029784..2ca870de9 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,7 @@ ver 0.20.22 (not yet released) * protocol - add tag fallbacks for AlbumArtistSort, ArtistSort + - fix empty string filter on fallback tags - "count group ..." can print an empty group - fix broken command "list ... group" * storage diff --git a/src/SongFilter.cxx b/src/SongFilter.cxx index faf5deb2a..8f6d3c67f 100644 --- a/src/SongFilter.cxx +++ b/src/SongFilter.cxx @@ -110,15 +110,6 @@ SongFilter::Item::Match(const Tag &_tag) const noexcept } if (tag < TAG_NUM_OF_ITEM_TYPES && !visited_types[tag]) { - /* If the search critieron was not visited during the - sweep through the song's tag, it means this field - is absent from the tag or empty. Thus, if the - searched string is also empty - then it's a match as well and we should return - true. */ - if (value.empty()) - return true; - bool result = false; if (ApplyTagFallback(TagType(tag), [&](TagType tag2) { @@ -136,6 +127,15 @@ SongFilter::Item::Match(const Tag &_tag) const noexcept return true; })) return result; + + /* If the search critieron was not visited during the + sweep through the song's tag, it means this field + is absent from the tag or empty. Thus, if the + searched string is also empty + then it's a match as well and we should return + true. */ + if (value.empty()) + return true; } return false;