--- 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;