RFR: 8217364: Custom URLStreamHandler for jrt or file protocol can override default handler

Claes Redestad claes.redestad at oracle.com
Thu May 2 12:15:27 UTC 2019


Hi Seán,

wouldn't it be more straightforward then to keep the logic intact and
skip the custom factory invocation in both cases if the protocol is
non-overrideable?

I.e., something like this:

diff -r 290283590646 src/java.base/share/classes/java/net/URL.java
--- a/src/java.base/share/classes/java/net/URL.java	Tue Apr 30 23:47:00 
2019 +0200
+++ b/src/java.base/share/classes/java/net/URL.java	Thu May 02 14:10:57 
2019 +0200
@@ -1403,8 +1403,9 @@

          URLStreamHandlerFactory fac;
          boolean checkedWithFactory = false;
+        boolean overrideableProtocol = isOverrideable(protocol);

-        if (isOverrideable(protocol) && jdk.internal.misc.VM.isBooted()) {
+        if (overrideableProtocol && jdk.internal.misc.VM.isBooted()) {
              // Use the factory (if any). Volatile read makes
              // URLStreamHandlerFactory appear fully initialized to 
current thread.
              fac = factory;
@@ -1440,7 +1441,7 @@

              // Check with factory if another thread set a
              // factory since our last check
-            if (!checkedWithFactory && (fac = factory) != null) {
+            if (overrideableProtocol && !checkedWithFactory && (fac = 
factory) != null) {
                  handler2 = fac.createURLStreamHandler(protocol);
              }

Thanks!

/Claes

On 2019-05-02 12:33, Seán Coffey wrote:
> with webrev: https://cr.openjdk.java.net/~coffeys/webrev.8217364.02/webrev/
> 
> regards,
> Sean.
> 
> On 02/05/2019 11:00, Seán Coffey wrote:
>> Been thinking a bit more about this one.
>>
>> Given that only initialization code will traverse through the "if 
>> (!isOverrideable(protocol))" check, I think we can add synchronization 
>> to eliminate any timing scenarios where the handlers Hashtable gets 
>> populated via another thread after we make the first handers.get call 
>> in getURLStreamHandler(String protocol)
>>
>> regards,
>> Sean.
>>
>> On 30/04/2019 18:19, Seán Coffey wrote:
>>> Looking to correct an issue that arose during the JDK-8213942 fix.
>>>
>>> https://bugs.openjdk.java.net/browse/JDK-8217364
>>> https://cr.openjdk.java.net/~coffeys/webrev.8217364/webrev/
>>>
>>> regards,
>>> Sean.
>>>


More information about the net-dev mailing list