diff --git a/src/share/classes/java/nio/file/Files.java b/src/share/classes/java/nio/file/Files.java index 2db7ba25c4a9ec09d248611ab25a9a12261d0a27..3f55f7addde86f6a0dd590a1a97816ab1d26aa44 100644 --- a/src/share/classes/java/nio/file/Files.java +++ b/src/share/classes/java/nio/file/Files.java @@ -1485,10 +1485,19 @@ public final class Files { // lazy loading of default and installed file type detectors private static class FileTypeDetectors{ static final FileTypeDetector defaultFileTypeDetector = - sun.nio.fs.DefaultFileTypeDetector.create(); + createDefaultFileTypeDetector(); static final List installeDetectors = loadInstalledDetectors(); + // creates the default file type detector + private static FileTypeDetector createDefaultFileTypeDetector() { + return AccessController + .doPrivileged(new PrivilegedAction() { + @Override public FileTypeDetector run() { + return sun.nio.fs.DefaultFileTypeDetector.create(); + }}); + } + // loads all installed file type detectors private static List loadInstalledDetectors() { return AccessController diff --git a/src/solaris/classes/sun/nio/fs/GnomeFileTypeDetector.java b/src/solaris/classes/sun/nio/fs/GnomeFileTypeDetector.java index f92a31488f8df7857d6765085205454677d7915a..af3a47440e8ba7067dceb0139f333733a46cde48 100644 --- a/src/solaris/classes/sun/nio/fs/GnomeFileTypeDetector.java +++ b/src/solaris/classes/sun/nio/fs/GnomeFileTypeDetector.java @@ -67,6 +67,8 @@ public class GnomeFileTypeDetector NativeBuffer buffer = NativeBuffers.asNativeBuffer(path.getByteArrayForSysCalls()); try { if (gioAvailable) { + // GIO may access file so need permission check + path.checkRead(); byte[] type = probeUsingGio(buffer.address()); return (type == null) ? null : new String(type); } else { @@ -76,7 +78,6 @@ public class GnomeFileTypeDetector String s = new String(type); return s.equals(GNOME_VFS_MIME_TYPE_UNKNOWN) ? null : s; } - } finally { buffer.release(); }