stop spuriously matching everything when encountering an unsupported charclass

This commit is contained in:
erik-krogh
2023-06-15 12:49:02 +02:00
parent e8b12ce416
commit 21b55ce0cf

View File

@@ -451,7 +451,15 @@ module Make<RegexTreeViewSig TreeImpl> {
}
bindingset[char]
override predicate matches(string char) { not hasChildThatMatches(cc, char) }
override predicate matches(string char) {
not hasChildThatMatches(cc, char) and
(
// detect unsupported char classes that doesn't match anything (e.g. `\p{L}` in ruby), and don't report any matches
exists(string c | hasChildThatMatches(cc, c))
or
not exists(cc.getAChild()) // [^] still matches everything
)
}
}
/**
@@ -536,7 +544,9 @@ module Make<RegexTreeViewSig TreeImpl> {
bindingset[char]
override predicate matches(string char) {
not classEscapeMatches(charClass.toLowerCase(), char)
not classEscapeMatches(charClass.toLowerCase(), char) and
// detect unsupported char classes (e.g. `\p{L}` in ruby), and don't report any matches
exists(string c | classEscapeMatches(charClass.toLowerCase(), c))
}
}