-
Bug
-
Resolution: Fixed
-
P4
-
16, 17
-
b08
-
Not verified
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8281521 | 17.0.4-oracle | Gauri Patil | P4 | Resolved | Fixed | b01 |
JDK-8282965 | 17.0.4 | Goetz Lindenmaier | P4 | Resolved | Fixed | b01 |
If an erroneous regex pattern contains "\t" (horizontal tab HT), the ^ (diagnostic caret) symbol might be misplaced. For example:
```
jshell> Pattern.compile("\t**")
| Exception java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 2
**
^
| at Pattern.error (Pattern.java:2028)
| at Pattern.sequence (Pattern.java:2203)
| at Pattern.expr (Pattern.java:2069)
| at Pattern.compile (Pattern.java:1783)
| at Pattern.<init> (Pattern.java:1430)
| at Pattern.compile (Pattern.java:1069)
| at (#2:1)
```
Compare that with this:
```
jshell> Pattern.compile(" **")
| Exception java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 2
**
^
| at Pattern.error (Pattern.java:2028)
| at Pattern.sequence (Pattern.java:2203)
| at Pattern.expr (Pattern.java:2069)
| at Pattern.compile (Pattern.java:1783)
| at Pattern.<init> (Pattern.java:1430)
| at Pattern.compile (Pattern.java:1069)
| at (#3:1)
```
This happens because when calculating required indentation, java.util.regex.PatternSyntaxException#getMessage translates "\t" into "\s" unlike, for example, com.sun.tools.javac.util.AbstractDiagnosticFormatter#formatSourceLine, which translates "\t" into "\t".
```
jshell> Pattern.compile("\t**")
| Exception java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 2
**
^
| at Pattern.error (Pattern.java:2028)
| at Pattern.sequence (Pattern.java:2203)
| at Pattern.expr (Pattern.java:2069)
| at Pattern.compile (Pattern.java:1783)
| at Pattern.<init> (Pattern.java:1430)
| at Pattern.compile (Pattern.java:1069)
| at (#2:1)
```
Compare that with this:
```
jshell> Pattern.compile(" **")
| Exception java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 2
**
^
| at Pattern.error (Pattern.java:2028)
| at Pattern.sequence (Pattern.java:2203)
| at Pattern.expr (Pattern.java:2069)
| at Pattern.compile (Pattern.java:1783)
| at Pattern.<init> (Pattern.java:1430)
| at Pattern.compile (Pattern.java:1069)
| at (#3:1)
```
This happens because when calculating required indentation, java.util.regex.PatternSyntaxException#getMessage translates "\t" into "\s" unlike, for example, com.sun.tools.javac.util.AbstractDiagnosticFormatter#formatSourceLine, which translates "\t" into "\t".
- backported by
-
JDK-8281521 Misplaced caret in PatternSyntaxException's detail message
-
- Resolved
-
-
JDK-8282965 Misplaced caret in PatternSyntaxException's detail message
-
- Resolved
-
- links to
-
Commit openjdk/jdk17u-dev/6fb49c33
-
Commit openjdk/jdk/bb508e13
-
Review openjdk/jdk17u-dev/219
-
Review openjdk/jdk/4906
(1 links to)