--- old/src/share/classes/java/util/logging/StreamHandler.java 2013-12-18 17:42:56.464375274 +0100
+++ new/src/share/classes/java/util/logging/StreamHandler.java 2013-12-18 17:42:56.387376734 +0100
@@ -27,6 +27,8 @@
package java.util.logging;
import java.io.*;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
/**
* Stream based logging Handler.
@@ -77,35 +79,11 @@
private boolean doneHeader;
private volatile Writer writer;
- // Private method to configure a StreamHandler from LogManager
- // properties and/or default values as specified in the class
- // javadoc.
- private void configure() {
- LogManager manager = LogManager.getLogManager();
- String cname = getClass().getName();
-
- setLevel(manager.getLevelProperty(cname +".level", Level.INFO));
- setFilter(manager.getFilterProperty(cname +".filter", null));
- setFormatter(manager.getFormatterProperty(cname +".formatter", new SimpleFormatter()));
- try {
- setEncoding(manager.getStringProperty(cname +".encoding", null));
- } catch (Exception ex) {
- try {
- setEncoding(null);
- } catch (Exception ex2) {
- // doing a setEncoding with null should always work.
- // assert false;
- }
- }
- }
-
/**
* Create a StreamHandler, with no current output stream.
*/
public StreamHandler() {
- sealed = false;
- configure();
- sealed = true;
+ configure(null);
}
/**
@@ -116,11 +94,11 @@
* @param formatter Formatter to be used to format output
*/
public StreamHandler(OutputStream out, Formatter formatter) {
- sealed = false;
- configure();
- setFormatter(formatter);
- setOutputStream(out);
- sealed = true;
+ if (formatter == null) {
+ throw new NullPointerException();
+ }
+ configure(formatter);
+ setOutputStreamPrivileged(out);
}
/**
@@ -301,4 +279,17 @@
public synchronized void close() throws SecurityException {
flushAndClose();
}
+
+ // Package-private support for setting OutputStream
+ // with elevated privilege.
+
+ final void setOutputStreamPrivileged(final OutputStream out) {
+ AccessController.doPrivileged(new PrivilegedAction() {
+ @Override
+ public Void run() {
+ setOutputStream(out);
+ return null;
+ }
+ }, null, LogManager.controlPermission);
+ }
}