Skip to content

Commit 21b55ce

Browse files
committed
stop spuriously matching everything when encountering an unsupported charclass
1 parent e8b12ce commit 21b55ce

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

shared/regex/codeql/regex/nfa/NfaUtils.qll

+12-2
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,15 @@ module Make<RegexTreeViewSig TreeImpl> {
451451
}
452452

453453
bindingset[char]
454-
override predicate matches(string char) { not hasChildThatMatches(cc, char) }
454+
override predicate matches(string char) {
455+
not hasChildThatMatches(cc, char) and
456+
(
457+
// detect unsupported char classes that doesn't match anything (e.g. `\p{L}` in ruby), and don't report any matches
458+
exists(string c | hasChildThatMatches(cc, c))
459+
or
460+
not exists(cc.getAChild()) // [^] still matches everything
461+
)
462+
}
455463
}
456464

457465
/**
@@ -536,7 +544,9 @@ module Make<RegexTreeViewSig TreeImpl> {
536544

537545
bindingset[char]
538546
override predicate matches(string char) {
539-
not classEscapeMatches(charClass.toLowerCase(), char)
547+
not classEscapeMatches(charClass.toLowerCase(), char) and
548+
// detect unsupported char classes (e.g. `\p{L}` in ruby), and don't report any matches
549+
exists(string c | classEscapeMatches(charClass.toLowerCase(), c))
540550
}
541551
}
542552

0 commit comments

Comments
 (0)