--- old/src/share/classes/java/util/logging/MemoryHandler.java 2013-12-14 18:14:18.415822057 +0100 +++ new/src/share/classes/java/util/logging/MemoryHandler.java 2013-12-14 18:14:18.293824210 +0100 @@ -25,6 +25,9 @@ package java.util.logging; +import java.security.AccessController; +import java.security.PrivilegedAction; + /** * Handler that buffers requests in a circular buffer in memory. *

@@ -94,21 +97,25 @@ private LogRecord buffer[]; int start, count; - // Private method to configure a MemoryHandler from LogManager + // Private PrivilegedAction to configure a MemoryHandler from LogManager // properties and/or default values as specified in the class // javadoc. - private void configure() { - LogManager manager = LogManager.getLogManager(); - String cname = getClass().getName(); - - pushLevel = manager.getLevelProperty(cname +".push", Level.SEVERE); - size = manager.getIntProperty(cname + ".size", DEFAULT_SIZE); - if (size <= 0) { - size = DEFAULT_SIZE; + private class ConfigureAction implements PrivilegedAction { + @Override + public Void run() { + LogManager manager = LogManager.getLogManager(); + String cname = MemoryHandler.this.getClass().getName(); + + pushLevel = manager.getLevelProperty(cname +".push", Level.SEVERE); + size = manager.getIntProperty(cname + ".size", DEFAULT_SIZE); + if (size <= 0) { + size = DEFAULT_SIZE; + } + setLevel(manager.getLevelProperty(cname +".level", Level.ALL)); + setFilter(manager.getFilterProperty(cname +".filter", null)); + setFormatter(manager.getFormatterProperty(cname +".formatter", new SimpleFormatter())); + return null; } - setLevel(manager.getLevelProperty(cname +".level", Level.ALL)); - setFilter(manager.getFilterProperty(cname +".filter", null)); - setFormatter(manager.getFormatterProperty(cname +".formatter", new SimpleFormatter())); } /** @@ -116,10 +123,8 @@ * LogManager configuration properties. */ public MemoryHandler() { - sealed = false; - configure(); - sealed = true; - + AccessController.doPrivileged(new ConfigureAction(), + null, LogManager.controlPermission); LogManager manager = LogManager.getLogManager(); String handlerName = getClass().getName(); String targetName = manager.getProperty(handlerName+".target"); @@ -164,9 +169,8 @@ if (size <= 0) { throw new IllegalArgumentException(); } - sealed = false; - configure(); - sealed = true; + AccessController.doPrivileged(new ConfigureAction(), + null, LogManager.controlPermission); this.target = target; this.pushLevel = pushLevel; this.size = size;