On Wed, 23 Dec 2020 05:38:36 GMT, Yoshiki Sato <ysato...@openjdk.org> wrote:

>> src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java line 
>> 736:
>> 
>>> 734: 
>>> 735:     // https://html.spec.whatwg.org/#the-id-attribute
>>> 736:     private static final Pattern validId = Pattern.compile("[^\s]+");
>> 
>> The regular expression is invalid and needs to be fixed. It should be 
>> `Pattern.compile("[^\\s]+")`
>> Note the extra `` character. This is because you need to escape the `` 
>> character in the string constant, so that the `` is seen in the pattern as 
>> part of `\s`.
>
> Correct.  Thanks a lot for finding this error.  
> Now that I have doubts why this line could have been compiled without error.  
> This line should cause a compiler error.
> 
> Let me review all anchor tests again because the logic should be checked 
> there.

For some reason, `"[^\s]+"` might have been dealt with as a text block, thus 
`\s` was regarded as a whitespace...
I believe a text block is defined with triple double quotes, but javac seems to 
accept `"[^\s]+"` as a text block.

That aside, all anchor tests look fine.  This is because there is no specific 
test to use whitespace characters such as `\n`, `\t`, `\r` and `\f` in an 
anchor name.  Also I confirmed the discrepancy of the results for `"[^\s]+"` 
and `"[^\\s]+"`.  It shows that the former is not exactly what we want to do.

$ jshell -J-Duser.language=en -J--show-version
java 15 2020-09-15
Java(TM) SE Runtime Environment (build 15+36-1562)
Java HotSpot(TM) 64-Bit Server VM (build 15+36-1562, mixed mode, sharing)
|  Welcome to JShell -- Version 15
|  For an introduction type: /help intro

jshell> Pattern validId1 = Pattern.compile("[^\s]+")
validId1 ==> [^ ]+

jshell> Pattern validId2 = Pattern.compile("[^\\s]+")
validId2 ==> [^\s]+

jshell> validId1.matcher("aaa").matches()
$3 ==> true

jshell> validId1.matcher("aaa ").matches()
$4 ==> false

jshell> validId1.matcher("aaa\n").matches()
$5 ==> true

jshell> validId2.matcher("aaa").matches()
$6 ==> true

jshell> validId2.matcher("aaa ").matches()
$7 ==> false

jshell> validId2.matcher("aaa\n").matches()
$8 ==> false

-------------

PR: https://git.openjdk.java.net/jdk/pull/893

Reply via email to