6991300: MimeTable is unsafe
authorchegar
Tue, 12 Oct 2010 17:01:07 +0100
changeset 6887 b74bcf130b67
parent 6886 d818a2dfb100
child 6889 6afd3474895b
6991300: MimeTable is unsafe Reviewed-by: alanb, michaelm
jdk/src/share/classes/sun/net/www/MimeTable.java
--- a/jdk/src/share/classes/sun/net/www/MimeTable.java	Tue Oct 12 11:11:32 2010 +0100
+++ b/jdk/src/share/classes/sun/net/www/MimeTable.java	Tue Oct 12 17:01:07 2010 +0100
@@ -73,29 +73,32 @@
 
     private static final String filePreamble = "sun.net.www MIME content-types table";
     private static final String fileMagic = "#" + filePreamble;
-    private static MimeTable defaultInstance = null;
 
     MimeTable() {
         load();
     }
 
+    private static class DefaultInstanceHolder {
+        static final MimeTable defaultInstance = getDefaultInstance();
+
+        static MimeTable getDefaultInstance() {
+            return java.security.AccessController.doPrivileged(
+                new java.security.PrivilegedAction<MimeTable>() {
+                public MimeTable run() {
+                    MimeTable instance = new MimeTable();
+                    URLConnection.setFileNameMap(instance);
+                    return instance;
+                }
+            });
+        }
+    }
+
     /**
      * Get the single instance of this class.  First use will load the
      * table from a data file.
      */
     public static MimeTable getDefaultTable() {
-        if (defaultInstance == null) {
-            java.security.AccessController.doPrivileged(
-                new java.security.PrivilegedAction<Void>() {
-                    public Void run() {
-                    defaultInstance = new MimeTable();
-                    URLConnection.setFileNameMap(defaultInstance);
-                    return null;
-                }
-            });
-        }
-
-        return defaultInstance;
+        return DefaultInstanceHolder.defaultInstance;
     }
 
     /**