changeset 4896:278d2d39eed8

8004288: (fs) Files.probeContentType problems Reviewed-by: ahgross, sherman
author alanb
date Wed, 27 Feb 2013 11:50:30 +0000
parents 234cf2f595bf
children 0805ccc98362
files src/share/classes/java/nio/file/Files.java src/solaris/classes/sun/nio/fs/GnomeFileTypeDetector.java
diffstat 2 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/java/nio/file/Files.java	Mon Mar 18 15:22:51 2013 +0100
+++ b/src/share/classes/java/nio/file/Files.java	Wed Feb 27 11:50:30 2013 +0000
@@ -1478,10 +1478,19 @@
     // 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<FileTypeDetector> installeDetectors =
             loadInstalledDetectors();
 
+        // creates the default file type detector
+        private static FileTypeDetector createDefaultFileTypeDetector() {
+            return AccessController
+                .doPrivileged(new PrivilegedAction<FileTypeDetector>() {
+                    @Override public FileTypeDetector run() {
+                        return sun.nio.fs.DefaultFileTypeDetector.create();
+                }});
+        }
+
         // loads all installed file type detectors
         private static List<FileTypeDetector> loadInstalledDetectors() {
             return AccessController
--- a/src/solaris/classes/sun/nio/fs/GnomeFileTypeDetector.java	Mon Mar 18 15:22:51 2013 +0100
+++ b/src/solaris/classes/sun/nio/fs/GnomeFileTypeDetector.java	Wed Feb 27 11:50:30 2013 +0000
@@ -67,6 +67,8 @@
         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 @@
                 String s = new String(type);
                 return s.equals(GNOME_VFS_MIME_TYPE_UNKNOWN) ? null : s;
             }
-
         } finally {
             buffer.release();
         }