[string] Match everything with an empty pattern and -e

I.e. `string match --entire "" -- banana` used to match nothing, now
it matches everything.

Fixes #4971.
This commit is contained in:
Fabian Homborg 2018-09-16 13:03:15 +02:00
parent d44c21b580
commit 3ba74b3195
4 changed files with 13 additions and 1 deletions

View File

@ -628,7 +628,8 @@ class wildcard_matcher_t : public string_matcher_t {
wcpattern[i] = towlower(wcpattern[i]);
}
}
if (opts.entire && !wcpattern.empty()) {
if (opts.entire) {
// If the pattern is empty, this becomes one ANY_STRING that matches everything.
if (wcpattern.front() != ANY_STRING) wcpattern.insert(0, 1, ANY_STRING);
if (wcpattern.back() != ANY_STRING) wcpattern.push_back(ANY_STRING);
}

View File

@ -283,6 +283,9 @@ string repeat -l fakearg
####################
# string match --entire -r "a*b[xy]+" abc abxc bye aaabyz kaabxz abbxy abcx caabxyxz
####################
# string match --entire "" -- banana
####################
# string match -r "a*b[xy]+" abc abxc bye aaabyz kaabxz abbxy abcx caabxyxz

View File

@ -289,6 +289,10 @@ logmsg 'string match --entire -r "a*b[xy]+" abc abxc bye aaabyz kaabxz abbxy abc
string match --entire -r "a*b[xy]+" abc abxc bye aaabyz kaabxz abbxy abcx caabxyxz
or echo exit 1
logmsg 'string match --entire "" -- banana'
string match --entire "" -- banana
or echo exit 1
logmsg 'string match -r "a*b[xy]+" abc abxc bye aaabyz kaabxz abbxy abcx caabxyxz'
string match -r "a*b[xy]+" abc abxc bye aaabyz kaabxz abbxy abcx caabxyxz
or echo exit 1

View File

@ -384,6 +384,10 @@ kaabxz
abbxy
caabxyxz
####################
# string match --entire "" -- banana
banana
####################
# string match -r "a*b[xy]+" abc abxc bye aaabyz kaabxz abbxy abcx caabxyxz
abx