string compared each key against every source, but its break on a match
only left the loop over sources, so the next key overwrote the result:
string :is "a" ["a", "b"] was false while ["b", "a"] was true. RFC 5229
makes a test true when any key matches. It now stops at the first match.
date :regex and currentdate :regex called the :matches comparator, so a
regular expression was read as a wildcard pattern and "^20[0-9]{2}$"
never matched a year. They now use the regex comparator, with its size
limit and cache, like every other test.
sieve_tests_match_any_key_and_regex_dates in crates/common covers both
and fails without the fix. Upstream's svtests (restored in full) pass.