AK: Allow trailing '*'s in a glob pattern to match nothing

Fixes part of #4607.
This commit is contained in:
AnotherTest 2020-12-29 00:04:12 +03:30 committed by Andreas Kling
parent 2ad5bfd78e
commit cbe0a8b403
2 changed files with 16 additions and 0 deletions

View file

@ -93,6 +93,14 @@ bool matches(const StringView& str, const StringView& mask, CaseSensitivity case
++mask_ptr;
}
if (string_ptr == string_end) {
// Allow ending '*' to contain nothing.
while (mask_ptr != mask_end && *mask_ptr == '*') {
record_span(string_ptr - string_start, 0);
++mask_ptr;
}
}
return string_ptr == string_end && mask_ptr == mask_end;
}

View file

@ -86,6 +86,14 @@ TEST_CASE(matches_with_positions)
EXPECT_EQ(spans, Vector<AK::MaskSpan>({ { 1, 3 } }));
}
// #4607
TEST_CASE(matches_trailing)
{
EXPECT(AK::StringUtils::matches("ab", "ab*"));
EXPECT(AK::StringUtils::matches("ab", "ab****"));
EXPECT(AK::StringUtils::matches("ab", "*ab****"));
}
TEST_CASE(convert_to_int)
{
auto value = AK::StringUtils::convert_to_int(StringView());