6891707: Eliminate the java.io.FilePermission dependency on PolicyFile
Summary: Replace call to PolicyFile.canonPath with its own implementation
Reviewed-by: alanb, mullan
--- a/jdk/src/share/classes/java/io/FilePermission.java Thu Oct 15 14:02:34 2009 +0100
+++ b/jdk/src/share/classes/java/io/FilePermission.java Thu Oct 15 17:36:53 2009 -0700
@@ -209,7 +209,17 @@
cpath = AccessController.doPrivileged(new PrivilegedAction<String>() {
public String run() {
try {
- return sun.security.provider.PolicyFile.canonPath(cpath);
+ String path = cpath;
+ if (cpath.endsWith("*")) {
+ // call getCanonicalPath with a path with wildcard character
+ // replaced to avoid calling it with paths that are
+ // intended to match all entries in a directory
+ path = path.substring(0, path.length()-1) + "-";
+ path = new File(path).getCanonicalPath();
+ return path.substring(0, path.length()-1) + "*";
+ } else {
+ return new File(path).getCanonicalPath();
+ }
} catch (IOException ioe) {
return cpath;
}
--- a/jdk/src/share/classes/sun/security/provider/PolicyFile.java Thu Oct 15 14:02:34 2009 +0100
+++ b/jdk/src/share/classes/sun/security/provider/PolicyFile.java Thu Oct 15 17:36:53 2009 -0700
@@ -1832,8 +1832,9 @@
return canonCs;
}
- // public for java.io.FilePermission
- public static String canonPath(String path) throws IOException {
+ // Wrapper to return a canonical path that avoids calling getCanonicalPath()
+ // with paths that are intended to match all entries in the directory
+ private static String canonPath(String path) throws IOException {
if (path.endsWith("*")) {
path = path.substring(0, path.length()-1) + "-";
path = new File(path).getCanonicalPath();