RFR: 8305763 : Parsing a URI with an underscore goes through a silent exception, negatively impacting performance [v3]
Andrey Turbanov
aturbanov at openjdk.org
Thu May 25 10:29:58 UTC 2023
On Wed, 24 May 2023 22:16:20 GMT, Dhamoder Nalla <duke at openjdk.org> wrote:
>> Issue 8305763 : Using underscores in the name for a URI triggers a silent exception in the java standard library, which consumes 5% of the CPU.
>>
>> Exception:
>> java.net.URISyntaxException: Illegal character in hostname at index N: xyz1_abcd.com
>> at java.base/java.net.URI$Parser.fail(URI.java:2943)
>> at java.base/java.net.URI$Parser.parseHostname(URI.java:3487)
>> at java.base/java.net.URI$Parser.parseServer(URI.java:3329)
>>
>> This exception is silent and does not produce any messages, except for ODP profiler, there is no other evidence that it’s happening (the stack trace above was printed after changes to Java library). The reason for this is because of how the URI creation is implemented in the java.net.URI class. There are two paths for creating a valid URI, and one of them goes through an exception.
>>
>> We can see that if parseServer fails, there is still a way the authority gets assigned and we don’t throw an exception from the method. This means, not being able to parse the server is ok and the exception is silenced. In our case, the server parsing fails because we find an illegal character, as only alphanumeric and dash characters are allowed.
>
> Dhamoder Nalla has updated the pull request incrementally with one additional commit since the last revision:
>
> address CR comments
src/java.base/share/classes/java/net/URI.java line 3306:
> 3304: q = parseServer(p, n, skipParseException);
> 3305: if (q < n) {
> 3306: if(skipParseException) {
Suggestion:
if (skipParseException) {
src/java.base/share/classes/java/net/URI.java line 3411:
> 3409: p = q;
> 3410: }
> 3411: } else if( p < n && skipParseException) {
Suggestion:
} else if (p < n && skipParseException) {
src/java.base/share/classes/java/net/URI.java line 3545:
> 3543: if ((p < n) && !at(p, n, ':'))
> 3544: {
> 3545: if(skipParseException)
Suggestion:
if (skipParseException) {
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/13430#discussion_r1205315982
PR Review Comment: https://git.openjdk.org/jdk/pull/13430#discussion_r1205316171
PR Review Comment: https://git.openjdk.org/jdk/pull/13430#discussion_r1205316378
More information about the net-dev
mailing list