mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
8223892: Improved handling of jar files
Reviewed-by: dfuchs, chegar, michaelm, rhalade, ahgross
This commit is contained in:
parent
8e2b10070e
commit
d6304e88e6
2 changed files with 24 additions and 1 deletions
|
@ -484,6 +484,16 @@ public final class URL implements java.io.Serializable {
|
|||
throw new MalformedURLException(s);
|
||||
}
|
||||
}
|
||||
if ("jar".equalsIgnoreCase(protocol)) {
|
||||
if (handler instanceof sun.net.www.protocol.jar.Handler) {
|
||||
// URL.openConnection() would throw a confusing exception
|
||||
// so generate a better exception here instead.
|
||||
String s = ((sun.net.www.protocol.jar.Handler) handler).checkNestedProtocol(file);
|
||||
if (s != null) {
|
||||
throw new MalformedURLException(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 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
|
||||
|
@ -121,6 +121,13 @@ public class Handler extends java.net.URLStreamHandler {
|
|||
return h;
|
||||
}
|
||||
|
||||
public String checkNestedProtocol(String spec) {
|
||||
if (spec.regionMatches(true, 0, "jar:", 0, 4)) {
|
||||
return "Nested JAR URLs are not supported";
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
|
@ -146,6 +153,12 @@ public class Handler extends java.net.URLStreamHandler {
|
|||
: false;
|
||||
spec = spec.substring(start, limit);
|
||||
|
||||
String exceptionMessage = checkNestedProtocol(spec);
|
||||
if (exceptionMessage != null) {
|
||||
// NPE will be transformed into MalformedURLException by the caller
|
||||
throw new NullPointerException(exceptionMessage);
|
||||
}
|
||||
|
||||
if (absoluteSpec) {
|
||||
file = parseAbsoluteSpec(spec);
|
||||
} else if (!refOnly) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue