Merge
diff --git a/src/share/classes/java/io/FilePermission.java b/src/share/classes/java/io/FilePermission.java
index 88c98fb..aeab68b 100644
--- a/src/share/classes/java/io/FilePermission.java
+++ b/src/share/classes/java/io/FilePermission.java
@@ -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;
}
diff --git a/src/share/classes/sun/security/provider/PolicyFile.java b/src/share/classes/sun/security/provider/PolicyFile.java
index 324e745..ed4757d 100644
--- a/src/share/classes/sun/security/provider/PolicyFile.java
+++ b/src/share/classes/sun/security/provider/PolicyFile.java
@@ -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();