Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 49374b8

Browse files
Fix parsing of alternations in character classes
1 parent 5ba6baf commit 49374b8

3 files changed

Lines changed: 4 additions & 1 deletion

File tree

java/ql/lib/semmle/code/java/regex/regex.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -807,6 +807,7 @@ abstract class RegexString extends StringLiteral {
807807
}
808808

809809
private predicate topLevel(int start, int end) {
810+
not this.inCharSet(start) and
810811
this.subalternation(start, end, _) and
811812
not this.isOptionDivider(end)
812813
}

java/ql/test/library-tests/regex/parser/RegexParseTests.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,5 @@ parseFailures
139139
| Test.java:19:26:19:30 | \\077 | [RegExpConstant,RegExpEscape] |
140140
| Test.java:19:31:19:31 | 7 | [RegExpConstant,RegExpNormalChar] |
141141
| Test.java:19:32:19:37 | \u1337 | [RegExpConstant,RegExpNormalChar] |
142+
| Test.java:20:10:20:12 | [\|] | [RegExpCharacterClass] |
143+
| Test.java:20:11:20:11 | \| | [RegExpConstant,RegExpNormalChar] |

java/ql/test/library-tests/regex/parser/Test.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class Test {
1717
"(?i)(?=a)(?!b)(?<=c)(?<!d)",
1818
"a||b|c(d|e|)f|g",
1919
"\\018\\033\\0377\\0777\u1337",
20-
20+
"[|]"
2121
};
2222

2323
void test() {

0 commit comments

Comments
 (0)