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

Reviewed-by: redestad
This commit is contained in:
Sean Coffey 2019-05-02 22:52:51 +01:00
parent 01e5390814
commit a712b37bd0
2 changed files with 69 additions and 3 deletions

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 1995, 2018, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1995, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -1403,8 +1403,9 @@ public final class URL implements java.io.Serializable {
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,8 @@ public final class URL implements java.io.Serializable {
// 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);
}