From 3ba74b3195c3f4cc0d1fc78ffdabaa202f13db13 Mon Sep 17 00:00:00 2001 From: Fabian Homborg Date: Sun, 16 Sep 2018 13:03:15 +0200 Subject: [PATCH] [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. --- src/builtin_string.cpp | 3 ++- tests/string.err | 3 +++ tests/string.in | 4 ++++ tests/string.out | 4 ++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/builtin_string.cpp b/src/builtin_string.cpp index 2f765e02c..4f0834038 100644 --- a/src/builtin_string.cpp +++ b/src/builtin_string.cpp @@ -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); } diff --git a/tests/string.err b/tests/string.err index aebb82052..890f6a00c 100644 --- a/tests/string.err +++ b/tests/string.err @@ -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 diff --git a/tests/string.in b/tests/string.in index e28f98bab..f267a1952 100644 --- a/tests/string.in +++ b/tests/string.in @@ -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 diff --git a/tests/string.out b/tests/string.out index 5fee2fbe1..d9de63114 100644 --- a/tests/string.out +++ b/tests/string.out @@ -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